2012-07-25 38 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(); 
    } 
}