gpt4 book ai didi

c# - 对于具有多个 == 运算符覆盖的类,空检查是不明确的

转载 作者:太空狗 更新时间:2023-10-29 17:43:26 25 4
gpt4 key购买 nike

我有一个类有两个重写 == 运算符,将其与此类的其他实例进行比较,并与字符串实例进行比较。

class SomeClass
{
string value;
public SomeClass (string _Value)
{
value = _Value;
}

static public bool operator == (SomeClass C1, SomeClass C2)
{
return C1.value == C2.value;
}

static public bool operator != (SomeClass C1, SomeClass C2)
{
return C1.value != C2.value;
}

static public bool operator == (SomeClass C1, string C2)
{
return C1.value == (string) C2;
}

static public bool operator != (SomeClass C1, string C2)
{
return C1.value != (string) C2;
}
}

但是,当我尝试将此类与 null 进行比较时:

        Console.WriteLine(someObject == null);

我收到以下错误:

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

我应该如何定义我的 == 覆盖,以便我仍然可以对此类的实例进行 null 检查?

最佳答案

由于您使用的是 null 文字,编译器不知道要调用哪个方法,因为 stringSomeClass 都可以是空。

强制编译器选择其中一种方法的一种技术是对 null 进行类型转换。

Console.WriteLine(someObject == ((SomeClass)null));

或者更好的是,不要显式使用 null,而是使用 default 关键字来获取 null 值(因为 default(T) 是当 T 是引用类型时为 null)。

Console.WriteLine(someObject == default(SomeClass));

关于c# - 对于具有多个 == 运算符覆盖的类,空检查是不明确的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18064326/

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