【问题标题】:Strange behaviour of if-evaluationif 评估的奇怪行为
【发布时间】:2013-11-16 12:09:21
【问题描述】:

我想检查 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;
}

“问题”已解决

【问题讨论】:

  • 你确定字符串相等吗?空格?套管?
  • 将其设置为 null 与将其从列表中删除不同。此外,它对我有用。您需要提供有关问题所在的更多详细信息。
  • 尝试修剪和 Ingoring 案例,也正如 Tim 所说,它不会删除它,它会使其无效
  • 我没有发现任何问题。在我的机器上工作。也许您的不相等字符串 真的 不相等,但看起来相等(可能是 unicode 字符?)

标签: c# if-statement conditional-statements


【解决方案1】:

试试这个:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      数组值错误,代码有效。

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

      试试看

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-20
        • 1970-01-01
        • 2020-09-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多