gpt4 book ai didi

c# - Int32.Equals 与 '==' 运算符

转载 作者:行者123 更新时间:2023-11-30 13:14:54 26 4
gpt4 key购买 nike

我环顾四周,但之前似乎没有人问过这个问题,所以就这样吧。

我正在开发一个将具有 IEquatable 接口(interface)的自定义类,因此我正在制作我自己的 Equals 方法。这是它的样子:

public bool Equals(QueryFilter qfilter)
{
if (qfilter == null)
{
return false;
}
return ((this.Value.Equals(qfilter.Value)) &&
(this.Name.Equals(qfilter.Name)) &&
(this.Order == qfilter.Order));
}

其中 Value、Name 和 Order 是 QueryFilter 类的字段。 Value 和 Name 是 strings,但 Order 是 int,我想知道使用 == 运算符是否合适,或者我是否应该寻求 Int32.Equals 方法,以“匹配”其他字段如何进行比较?我检查了 MSDN,但没有详细说明,只是说它重载了,但我不确定在这种情况下这意味着什么。 == 会一直工作吗?

那么综上所述,哪个更好呢? Int32.Equals 还是 ==?我应该什么时候使用它们?

最佳答案

是的,使用 == 运算符绝对没问题,只要Order编译时 类型是int

例如,如果编译时类型是 object,那么您将处理 boxed int 值并将这些框与引用平等,这不是你所追求的。但只要编译器知道它们是 int 值,就没问题。

请注意,可以为 NameValue 执行此操作 - 同样,假设 编译时 这些属性的类型是 string (因为编译器使用 string 提供的重载。然后你可以使用 && 是短路,去掉不必要的括号,剩下:

public  bool Equals(QueryFilter other)
{
return other != null &&
this.Value == other.Value &&
this.Name == other.Name &&
this.Order == other.Order;
}

...我当然更愿意看到。

这也处理了 ValueNamenull 的情况,以一种显而易见的方式(null 引用彼此相等而不等于任何非空引用)。如果您的现有代码达到 this.Value.Equalsthis.Name.Equals 的 null 属性值,则会抛出 NullReferenceException。 (您很可能会确保永远不会出现这种情况,但值得一提。)

您还应该确保您的哈希码与相等性一致,并且也覆盖Equals(object)

关于c# - Int32.Equals 与 '==' 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22234776/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com