C#如何创建大量类似的运算符'自定义结构中的重载

时间:2014-12-15 09:27:32

标签: c# struct overloading operator-keyword

    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等),或者有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

我的建议是使用可空类型:decimal?。这将允许您为变量指定NULL以指示它不是数字。

此处提供了该语言此功能的文档:http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx