我有类"A",它重载"=="运算符以允许实例与同一类"A"的实例和类"B"的实例进行比较.
它工作正常,但当我尝试使用"== null"(比较"A"类实例为null)编译器抛出错误:
Ambiguous invocation:
bool == (A, A)
bool == (A, B)
Run Code Online (Sandbox Code Playgroud)
是否有可能以某种方式重构类以使"== null"可编辑或者ReferenceEquals是唯一的选择(有趣,但"Yoda条件"null == A-class-instance工作正常)
最简单的方法就是施放:
if (a == (A) null)
Run Code Online (Sandbox Code Playgroud)
假设您要调用重载运算符.如果要比较引用相等性,可以使用以下任一方法:
if (a == (object) null)
if (ReferenceEquals(a, null))
Run Code Online (Sandbox Code Playgroud)
就个人而言,我会选择第二个 - 我发现它更明确,更清晰.
我对逆转版本工作原理的猜测是没有超载==(B, A).
就个人而言,无论如何我都会避免重载==这对于不同类型的实例进行比较是非常不寻常的,特别是使用==.如果操作员没有对称地过载,情况会更糟:
bool x = (a == b);
bool y = (b == a);
Run Code Online (Sandbox Code Playgroud)
如果x并且y可以在这里有不同的价值,你真的要求一个痛苦的世界和难以发现的错误.只是不要这样做......
| 归档时间: |
|
| 查看次数: |
553 次 |
| 最近记录: |