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