我正在创建一个定义数字(实数、虚数或复数)的简单类
。为了在使用 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/