我对Foreach Loop不太了解
我有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();
}
}
}
我应该如何将默认加密值分配给该数组中的空字符串中的字符串。请帮助我......
答案 0 :(得分: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";
}
}
答案 1 :(得分: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();
}
}
答案 2 :(得分: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();
}
}
答案 3 :(得分:2)
循环字符串数组并更改当前字符串的值并不意味着您要更改数组中字符串的值。当foreach在数组上循环时,它会在i
中返回一个新的字符串实例,因此更改i
不会更改namesArray中的值。
您需要一个带索引器的传统for循环来直接访问namesArray
for(int i = 0; i < namesArray.Length; i++)
{
if (namesArray[i] == string.Empty)
{
namesArray[i] = EncValue.ToString();
}
}
答案 4 :(得分:1)
string[] newNamesArray =
Enumerable.Select(namesArray, s => s == "" ? EncValue : s).ToArray();