1

Arguments に ParameterSwitches の文字列が含まれているかどうかを確認したい。その場合は、Arguments から削除する必要があります。

問題は、pSwitch が Arguments[i] と同じ値を持っていても、条件が成立せず、Arguments[i] = null; であることです。実行されません。

デバッガーで段階的に試してみましたが、私の仮定が確認されたため、さらに混乱しました。

string[] Arguments = new string[]{/*some strings*/};
string[] ParameterSwitches = new string[]{/*some strings*/};
for (int i = 0; i < Arguments.Length; i++)
{
    foreach (string pSwitch in ParameterSwitches)
    {
        if (pSwitch == Arguments[i])
        {
            Arguments[i] = null;
        }
    }
}

誰もがこれが起こる方法を想像できますか?

前もって感謝します

更新: ああ、みんな... 次回は、ここで質問する前にメガネを使用します。弦の 1 つの後に小さな空白がありました。それが問題でした。トリミングはうまくいきました。

if (String.Equals(pSwitch.Trim().ToUpper(), Arguments[i].Trim().ToUpper()))
{
    Arguments[i] = null;
}

"問題が解決しました

4

3 に答える 3

0

定義済みの値の型の場合、等価演算子 (==) は、オペランドの値が等しい場合は true を返し、そうでない場合は false を返します。文字列以外の参照型の場合、2 つのオペランドが同じオブジェクトを参照している場合、== は true を返します。文字列型の場合、== は文字列の値を比較します。

これは、各反復の値を文字列オブジェクトに入れる for each ループと Arguments[i] の逆参照によるものだと思います。

外側のループで行ったように、内側のループを命令型コードに変更するとどうなるでしょうか。これにより、別の反復変数が導入されます。または、逆に for each ループを 2 つ作成します。

于 2013-11-05T15:11:14.153 に答える
0

配列値の間違い、コードは機能します。

private static void Main(string[] args)
{
    string[] Arguments = new string[] {"111", "222"};
    string[] ParameterSwitches = new string[] {"111", "222"};
    for (int i = 0; i < Arguments.Length; i++)
    {
        foreach (string pSwitch in ParameterSwitches)
        {
            if (pSwitch == Arguments[i])
            {
                // set breakpoint here to see
                Arguments[i] = null;
            }
        }
    }
}

それを試してみてください

于 2013-11-05T15:12:24.960 に答える