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

谁能想象这种情况会发生的方式?

提前致谢

更新: 哦,女孩们,伙计们……下次我在这里问问题之前戴上我的眼镜。其中一根弦后有一小块空白。这就是问题所在。修剪起到了作用。

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

“问题解决了

4

3 回答 3

3

尝试这个:

if(string.Equals(pSwitch.Trim(), Arguments[i].Trim(), StringComparison.OrdinalIgnoreCase))

我假设您的字符串不匹配,因为它们没有被修剪,或者大小写错误,任何其他大小写都与您的描述不匹配

于 2013-11-05T15:08:38.180 回答
0

对于预定义的值类型,相等运算符 (==) 如果其操作数的值相等则返回 true,否则返回 false。对于字符串以外的引用类型,== 如果它的两个操作数引用同一个对象,则返回 true。对于字符串类型,== 比较字符串的值。

我有点认为这是由于 Arguments[i] 与 for each 循环的取消引用,后者将每次迭代的值放在字符串对象中。

如果像在外循环中那样将内循环更改为命令式代码,从而引入另一个迭代变量,会发生什么情况。或者反过来为每个循环创建两个。

于 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 回答