3

我对 Foreach 循环不太了解

我有 4 个字符串变量,我将 app.config 中的加密值存储在这些变量中。我的工作是检测这 4 个变量中是否有数据。即使没有值,我也想将默认加密值传递给它.我开始这样做......

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();
        }
    }
}

我应该如何为该数组中的字符串分配默认加密值,该字符串是一个空字符串。请帮我....

4

5 回答 5

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";
                }
            }
于 2012-07-25T21:18:29.970 回答
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();
    }
}
于 2012-07-25T21:20:10.037 回答
2

您不能在foreach循环中修改变量。您的代码应该给您以下编译错误:

无法分配给“i”,因为它是“foreach 迭代变量”

您可以使用 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();
    }
}
于 2012-07-25T21:21:24.147 回答
2

在字符串数组上循环并更改当前字符串的值并不意味着您正在更改数组内字符串的值。当 foreach 在您的数组上循环时,它会在 中返回一个新的字符串实例i,因此更改它i不会更改 namesArray 中的值。您需要一个带有索引器的传统 for 循环来直接访问 namesArray

for(int i = 0; i < namesArray.Length; i++) 
{ 
    if (namesArray[i] == string.Empty) 
    { 
         namesArray[i] = EncValue.ToString(); 
    } 
} 
于 2012-07-25T21:24:23.420 回答
1
string[] newNamesArray = 
       Enumerable.Select(namesArray, s => s == "" ? EncValue : s).ToArray();
于 2012-07-25T21:24:11.793 回答