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();、空の文字列をテストするためにも使用する必要があります。

編集(マークの答えからの恥知らずなコピー):

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 の値は変更されません。namesArray に直接アクセスするには、インデクサーを使用した従来の for ループが必要です。

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 に答える