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

C#如何创建大量类似的运算符';自定义结构中的重载,c#,struct,overloading,operator-keyword,C#,Struct,Overloading,Operator Keyword,我这里有一个结构(我们称之为DON),它存储小数,但有一个选项,其中包含“非数字”,这是常规小数所缺少的。我可以自己添加所需的隐式转换,但我也需要它能够与其他don以及int、double和decimal进行加法、减法和乘法。我是否必须自己用参数的每个变化(int+DON、DON+int、int*DON、DON*int等等)创建每个运算符,还是有更好的方法来创建它?我的建议是使用可空类型:decimal?。这将允许您为变量赋值NULL,以指示它不是一个数字 这里提供了该语言此功能的文档:您考虑过

我这里有一个结构(我们称之为DON),它存储小数,但有一个选项,其中包含“非数字”,这是常规小数所缺少的。我可以自己添加所需的隐式转换,但我也需要它能够与其他don以及int、double和decimal进行加法、减法和乘法。我是否必须自己用参数的每个变化(int+DON、DON+int、int*DON、DON*int等等)创建每个运算符,还是有更好的方法来创建它?

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


这里提供了该语言此功能的文档:

您考虑过使用可空类型“decimal”吗?@Alan是的,这就是我最终的解决方法,但是如果我需要一个更复杂的结构怎么办?这是我为这个小案例提出的解决方案,但是如果我需要,例如,存储在其中的3d十进制向量与NaN或其他的相同选项?必须有一种方法来处理这个结构,不是吗?@Irdes
Nullable
,只要
3DVector
是一个结构。。。语法
struct?
只是
Nullable
的快捷方式。
    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);
        }         
    }