gpt4 book ai didi

c# - 我应该为对象和 MyType 覆盖 == 吗?

转载 作者:太空狗 更新时间:2023-10-29 19:46:30 27 4
gpt4 key购买 nike

我有一个 struct称为 MyType实现 IEquatable<MyType> .

我已经实现了operator ==(MyType x, MyType y) , 但我是否也应该实现 operator ==(MyType x, object y)对于下面的情况?

例如:

public static bool operator ==(MyType x, object y)
{
if (y is MyType)
{
return x == (MyType)y;
}

return false;
}

用法:

var a = new MyType();
object b = new MyType();

var result = (a == b); // ?

最佳答案

据我所知,没有 CTS 类型会这样做。很好的例子包括 DecimalDateTime,它们都只为其各自的类型实现相等性,而不为其基类型或接口(interface)实现相等性。

此外,此实现可能鼓励将几乎任何类型与您的结构进行比较,甚至其他结构,并且将来可能使用您的代码的人可能会考虑将 MyTypeMyOtherType 可能有意义,但它所做的只是装箱另一种类型,然后返回 false。此外,通常将 object 上的 == 解释为引用相等。

In addition, you should overload the op_Equality and op_Inequality operators. This ensures that all tests for equality return consistent results.

documentation没有告诉你应该重载哪些相等运算符,第二句话实际上可以解释为 MyType == objectMyType.Equals(object) 一致。但是,实际上没有 .NET 类型这样做并且会导致混淆这一事实足以说明这不是一个好的做法。

如果其他类型可以被视为MyType,则重载显式或隐式转换。

关于c# - 我应该为对象和 MyType 覆盖 == 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41933855/

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