【问题标题】:Difference when comparing int and string having dynamic, object and int/string as parameter?比较具有动态,对象和int / string作为参数的int和string时的区别?
【发布时间】:2019-12-30 22:35:30
【问题描述】:

我尝试使用等号运算符“==”比较两个 int 值和两个字符串值。我使用了 3 个函数,它们的输入参数类型为动态、对象和 int/string。当我使用字符串参数进行比较时,似乎在所有 3 种情况下使用 ' == ' 运算符都会返回正确答案。使用 int 类型时,在 object 输入类型参数的情况下,即使 2 个 int 值相等,它也会返回 false。我知道'=='运算符,如果是对象,它会比较2个对象在内存中是否具有相同的引用,所以这可以解释为什么我收到错误。但我不明白为什么在字符串类型的情况下它工作得很好。

代码:

public static bool CompareD(dynamic a, dynamic b)
{
    return a == b;
}

public static bool CompareO(object a, object b)
{
    return a == b;
}

public static bool CompareS(int a, int b)
{
    return a == b;
}

我期待当我使用字符串时,在对象类型输入参数的情况下,即使这两个字符串相等,也会收到 false,就像 int 的情况一样,但我收到了正确的答案。

【问题讨论】:

    标签: c# string object dynamic compare


    【解决方案1】:

    这可能是因为字符串是不可变的。实现这一点的代码在 String 类中。它看起来像这样:

    public static bool operator ==(string a, string b)
    {
        return string.Equals(a, b);
    }
    

    所以任何“==”比较都将检查相等性而不是字符串上的引用。

    【讨论】:

      猜你喜欢
      • 2012-04-18
      • 2012-03-17
      • 2023-04-04
      • 2012-01-15
      • 2020-10-14
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多