gpt4 book ai didi

c# - 如果 "== null"运算符重载以与多种类类型进行比较,我应该如何使用 "=="

转载 作者:太空狗 更新时间:2023-10-30 00:16:51 25 4
gpt4 key购买 nike

我有一个重载“==”运算符的类“A”,以允许将实例与同一类“A”的实例和类“B”的实例进行比较。

它工作正常,但是当我尝试使用“== null”(将“A”类实例与 null 进行比较)时,编译器会抛出错误:

Ambiguous invocation:
bool == (A, A)
bool == (A, B)

是否有可能以某种方式重构类以使“== null”可编译或 ReferenceEquals 是唯一的选择(有趣,但“Yoda 条件”null == A-class-instance 工作正常)

最佳答案

最简单的方法就是强制转换:

if (a == (A) null)

这是假设您想要调用重载运算符。如果要比较引用相等性,可以使用以下任一方法:

if (a == (object) null)
if (ReferenceEquals(a, null))

就我个人而言,我会选择第二种 - 我发现它更明确,因此也更清晰。

我猜测为什么反向版本有效是因为没有 ==(B, A) 的重载。

就我个人而言,无论如何我都会避免像这样重载 == - 不同类型的实例比较相等是非常不寻常的,尤其是使用 == 时。如果运算符没有对称重载,情况会更糟:

bool x = (a == b);
bool y = (b == a);

如果 xy 在这里可以有不同的值,那么您实际上是在寻求一个充满痛苦和难以发现错误的世界。只是不要这样做...

关于c# - 如果 "== null"运算符重载以与多种类类型进行比较,我应该如何使用 "==",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4933141/

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