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/zh-cn/library/1t3y8s4s.aspx
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句