[英]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.