c# - 为 null 重载 == 运算符

标签 c# .net null operator-overloading equals-operator

我有一个名为 Message 的类,它重载了这些运算符:

public static bool operator ==(Message left, Message right)
public static bool operator !=(Message left, Message right)

public static bool operator ==(Message left, string right)
public static bool operator !=(Message left, string right)

public static bool operator ==(string left, Message right)
public static bool operator !=(string left, Message right)

我希望 ==!= 运算符继续比较 StringMessage 以外的类型的引用> 但是,

var message = new Message();
var isNull = message == null;

给我这个:

The call is ambiguous between the following methods or properties: 'Message.operator ==(Message, Message)' and 'Message.operator ==(Message, string)'

我知道是因为MessageString都是引用类型,它们都可以是null,但是我希望能够使用== 运算符,用于检查消息是否为空。

我可以为空值重载 == 吗?我尝试为 object 重载它并在重载中调用 object.ReferenceEquals(object, object) 但这没有帮助。

最佳答案

operator ==(Message left, object right) 提供一个实现,并检查right 的类型,看它是null、字符串还是Message。

或者,为采用字符串的 Message 定义一个隐式构造函数。参见 Operator overloading and different types举个例子。

关于c# - 为 null 重载 == 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12560253/

相关文章:

c# 控制台应用程序 Microsoft.Win32.TaskScheduler.dll FileNotFoundException on Deployment

.net - Vb.net 仅从带整数的字符串中获取整数

c# - 当 dbContext 带有 'using' block 时,如何从 Linq 返回 IQueryable 到 SQL 查询?

java - Getter 从 Activity 类返回 null

powershell - 检查 PowerShell 对象是否存在的最佳方法?

c# - 什么是过时的 XmlValidatingReader 类的良好替代品?

c# - wcf - MaxConcurrentCalls 和 MaxConcurrentSessions 属性之间的区别

c# - 模拟兄弟方法

.net - 为什么too​​lstriplabel 的backcolor 属性在设计时或运行时不会改变?

swift 'NilLiteralConvertible' 错误 : Optional class type