C# 使用自定义 == 运算符检查类是否为空

标签 c# operators nullreferenceexception

我正在创建一个定义数字(实数、虚数或复数)的简单。为了在使用 class 时让事情变得简单,我创建了自己的 operator == 版本。

public class Number
{
    public double Real { get; set; }
    public double Imag { get; set; }

    ...

    public static bool operator ==(Number x, Number y)
    {
        return (x.Real == y.Real && x.Imag == y.Imag);  // Error is thrown here
    }
    public static bool operator !=(Number x, Number y)
    {
        return !(x == y);
    }
}

但是,当我想检查 Number 是否为 null 时,代码会抛出 NullReferenceException

Number overlap = null;
Number overlapsolve = null;

...

if (overlap != null && overlapsolve != null)  // This is what triggers the error
{
    ...
}

如何检查 Number 类是否为 null

最佳答案

首先,你知道System.Numerics.Complex吗? ?这似乎正是您所需要的。

但要回答您的问题,请将您的 == 运算符更改为如下所示:

public static bool operator ==(Number x, Number y)
{
     if(ReferenceEquals(x, y)) return true;

     if(ReferenceEquals(x, null) || ReferenceEquals(y, null)) return false;

     return x.Real == y.Real && x.Imag == y.Imag;  
}

注意不要使用 == 进行空值检查,因为这最终会变成无限递归调用。

关于C# 使用自定义 == 运算符检查类是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25007374/

相关文章:

c# - 如何检测是否未选择 ComboBox 上的任何选定项目?

c# - 如何从 Xamarin.forms 中的按钮单击从一页移动到另一页

c++ - 使用 += 运算符时的隐式转换?

.net - 避免在 StyleHelper.OnBindingValueInTemplateChanged 中发生 NullReferenceException 崩溃

c# - 什么是NullReferenceException,如何解决?

c# - 无法在 wp7 应用程序中获取 mp3 文件流

c# - MVC C# 网站应用程序中使用的文本区域中的换行符

c# - 为 swagger 的 "Try it out"指定示例请求

C++ 模板与 operator< 不匹配

c++ - C++ 中的函数可以返回一些东西然后执行它的代码吗?