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等),或者有更好的方法吗?
答案 0 :(得分:2)
我的建议是使用可空类型:decimal?。这将允许您为变量指定NULL以指示它不是数字。
此处提供了该语言此功能的文档:http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx