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等)创建每个运算符,或者有更好的方法可以做到这一点?

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

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

有关

该语言的此功能的文档,请参阅此处:http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx