我想检查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;
}
“问题”已解决
答案 0 :(得分:3)
试试这个:
if(string.Equals(pSwitch.Trim(), Arguments[i].Trim(), StringComparison.OrdinalIgnoreCase))
我认为你的字符串不匹配,因为它们没有被修剪,或者情况有误,任何其他情况都不符合你的描述
答案 1 :(得分:0)
对于预定义的值类型,如果操作数的值相等,则等于运算符(==)返回true,否则返回false。对于除string之外的引用类型,如果其两个操作数引用同一对象,则==返回true。对于字符串类型,==比较字符串的值。
我认为这是由于Arguments [i]与每个循环的取消引用,它将每个迭代的值放在一个字符串对象中。
如果您像在外部循环中那样将内循环更改为命令式代码会发生什么,从而引入另一个迭代变量。或者反过来为每个循环创建两个。
答案 2 :(得分: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;
}
}
}
}
试试吧