C# 如何在自定义结构中创建大量类似的运算符重载
本文关键字:重载 运算符 创建 自定义 结构 | 更新日期: 2023-09-27 18:34:11
public struct DecimalOrNaN
{
public decimal Value;
public bool isNaN;
public DecimalOrNaN (double D)
{
if (Double.IsNaN(D))
{
Value = default(decimal);
isNaN = true;
}
else
{
Value = (decimal)D;
isNaN = false;
}
}
public DecimalOrNaN(decimal D)
{
Value = D;
isNaN = false;
}
public implicit operator DecimalOrNaN(double D)
{
return new DecimalOrNaN(D);
}
public implicit operator DecimalOrNaN(decimal D)
{
return new DecimalOrNaN(D);
}
public DecimalOrNaN operator *(int I, DecimalOrNaN D)
{
return new DecimalOrNaN(D.Value * I);
}
}
我这里有这个结构(我们称之为 DON),它存储小数,但可以选择在其中包含"不是数字",这是常规十进制所缺乏的。我可以自己添加所需的隐式转换,但我也需要它能够与其他 DON 以及整数、双精度和小数进行加、减和乘法。我是否必须自己使用参数的每个变体(int + DON,DON + int,int * DON,DON * int等)创建每个运算符,或者有更好的方法可以做到这一点?
我的建议是使用可为空的类型:十进制?这将允许您为变量分配 NULL 以指示它不是数字。
有关该语言的此功能的文档,请参阅此处:http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx