2012-07-25 214 views
3

值我不約Foreach循環foreach循環來檢查空字符串,並將其分配C#

太多的想法,我有4個字符串變量,我存儲那些varialbles.My工作從app.config中的加密值是以檢測是否存在這些4 variables.Even的數據,如果一個犯規有價值觀,我想傳遞給它。我開始做這樣一個默認的加密值......

string EncValue = oEncrypt.EncryptBase64String("NO Data Found"); 
UpdateOrCreateAppSetting("UserName", ref MPScmUserName); 
UpdateOrCreateAppSetting("Password", ref MPScmPassword); 
UpdateOrCreateAppSetting("DBUserName", ref MPDbUserName); 
UpdateOrCreateAppSetting("DBPassword", ref MPDbPassword); 
var list5 = from docs in doc1.Descendants("appender").Elements() 
              where docs.Name == "file" 
              select docs; 
var element5 = list5.FirstOrDefault(); 
MPLoadAppConfig = appConfigFile1; 
MPErrorLog = element5.Attribute("value").Value; 

string[] namesArray = new string[] { 
     MPScmUserName,MPScmPassword,MPDbUserName,MPDbPassword}; 

foreach (string i in namesArray) 
{ 
    if (i is string) 
    { 
     if (i == "") 
     { 
      i = EncValue.ToString(); 
     } 
    } 
} 

我應該如何分配默認加密值爲該數組中的字符串,該字符串是一個空字符串。請幫助我....

+0

好吧,首先,你不需要'如果(我是字符串)',因爲它是一個字符串數組。他們必須是字符串。然後,我會用'if(String.IsNullOrEmpty(i))'替換'if(i ==「」)''。但從結構上看,我沒有看到這個問題。你有什麼問題? – 2012-07-25 21:19:43

回答

2

您不需要說if (i is string)因爲它已經是一個字符串。

在另一個if阻止你可能會說

if(string.IsNullOrEmpty(i)) 
{ 
} 

,或者您可以使用:

string[] arr = new string[] { "","A"}; 

      for (int i = 0; i < arr.Length; i++) 
      { 
       if (string.IsNullOrEmpty(arr[i])) 
       { 
        arr[i] = "Hello"; 
       } 
      } 
+0

好的......如果其中一個字符串爲空,如何設置Defualt值? – user1410658 2012-07-25 21:21:50

+0

用於循環,因爲我舉了一個例子。 – 2012-07-25 21:23:10

2

無需爲if (i is string)一部分,因爲你已經知道這是一個string。您應該也可以使用string.IsNullOrWhiteSpace();來測試一個空字符串。

編輯(從Mark's answer無恥複印件):

for (int i = 0; i < namesArray.Length; ++i) 
{ 
    if (string.IsNullOrWhiteSpace(namesArray[i])) 
    { 
     namesArray[i] = EncValue.ToString(); 
    } 
} 
+0

如果其中一個字符串爲空,如何設置Defualt值? – user1410658 2012-07-25 21:22:12

+0

@ user1410658我根據Marc的回答更新了我的答案。 – 2012-07-25 21:35:47

2

您不能修改該變量在foreach循環。您的代碼應該給你以下編譯錯誤:

Cannot assign to 'i' because it is a 'foreach iteration variable'

你可以做到這一點使用LINQ:

namesArray = namesArray.Select(s => s == "" ? EncValue.ToString() : s).ToArray(); 

或者你可以使用一個簡單的for循環:

for (int i = 0; i < namesArray.Length; ++i) 
{ 
    if (namesArray[i] == "") 
    { 
     namesArray[i] = EncValue.ToString(); 
    } 
} 
+0

在'for'循環中擊敗我。 Linq選項可能無法使用,具體取決於他使用的.NET框架的版本。 – 2012-07-25 21:24:51

+0

然而,Linq版本真的很優雅。我需要Linq課程。你有Mark嗎? :) – Steve 2012-07-25 21:30:19

1
string[] newNamesArray = 
     Enumerable.Select(namesArray, s => s == "" ? EncValue : s).ToArray(); 
2

在字符串數組上循環並更改當前字符串的值並不意味着您正在更改該值數組中的字符串。當數組的foreach循環返回一個新的字符串實例i,所以更改i不會更改namesArray中的值。 你需要一個傳統的for循環與索引器直接訪問到namesArray

for(int i = 0; i < namesArray.Length; i++) 
{ 
    if (namesArray[i] == string.Empty) 
    { 
     namesArray[i] = EncValue.ToString(); 
    } 
}