繁体   English   中英

if-evaluation的奇怪行为

[英]Strange behaviour of if-evaluation

我想检查Arguments是否包含ParameterSwitches的字符串。 如果是这种情况,则应从参数中删除它。

问题是,即使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;
}

“问题解决了

尝试这个:

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

我假设你的字符串不匹配,因为它们没有被修剪,或者情况有误,任何其他情况都不符合你的描述

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

我认为这是由于Arguments [i]与每个循环的取消引用,它将每个迭代的值放在一个字符串对象中。

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

错误的数组值,代码工作。

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

试试吧

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM