Foreach循环检查空字符串并为其赋值c#

Foreach循环检查空字符串并为其赋值c#,c#,encryption,foreach,C#,Encryption,Foreach,我不太了解Foreach循环 我有4个字符串变量,我将app.config中的加密值存储在这些变量文件中。我的工作是检测这4个变量中是否有数据。即使其中一个变量没有值,我也希望将默认加密值传递给它。我开始这样做 string EncValue = oEncrypt.EncryptBase64String("NO Data Found"); UpdateOrCreateAppSetting("UserName", ref MPScmUserName); UpdateOrCreateAppSetti

我不太了解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();
        }
    }
}

如何将默认加密值分配给该数组中的空字符串。请帮帮我

您不需要说
if(i是字符串)
,因为它已经是字符串了

在另一个
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";
                }
            }
string[]arr=新字符串[]{”,“A”};
对于(int i=0;i
不需要
if(i是字符串)
部分,因为您已经知道它是
字符串。您可能还应该使用
string.IsNullOrWhiteSpace()以测试空字符串

编辑(无耻地抄袭自):

for(int i=0;i
您不能在
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();
    }
}
for(int i=0;i
在字符串数组上循环并更改当前字符串的值并不意味着您正在更改数组中字符串的值。当foreach在数组上循环时,它在
i
中返回一个新的字符串实例,因此更改
i
不会更改namesArray中的值。 您需要一个带有索引器的传统for循环来直接访问namesArray

for(int i = 0; i < namesArray.Length; i++) 
{ 
    if (namesArray[i] == string.Empty) 
    { 
         namesArray[i] = EncValue.ToString(); 
    } 
} 
for(int i=0;i
首先,您不需要
if(i是string)
,因为它是一个字符串数组。它们必须是字符串。然后,我将用
if(String.IsNullOrEmpty(I))
替换
if(I==“”)
。但从结构上看,我看不出这有任何其他问题。。您遇到的问题是什么?好的……如果其中一个字符串为空,如何设置解除UALT值?使用for循环,正如我给出的示例。如果其中一个字符串为空,如何设置解除UALT值?请在
for
循环中告诉我。Linq选项可能不可用,这取决于他所使用的.NET framework的版本。但是Linq版本非常优雅。我需要一门关于林克的课程。你有空吗马克?:)
string[] newNamesArray = 
       Enumerable.Select(namesArray, s => s == "" ? EncValue : s).ToArray();
for(int i = 0; i < namesArray.Length; i++) 
{ 
    if (namesArray[i] == string.Empty) 
    { 
         namesArray[i] = EncValue.ToString(); 
    } 
}