例如,我有一个随机数,但它可以有#34;特殊数字"值。这样的事情:
enum XNumber { INFINITY, NEGATIVE, int }
所以我可以存储:
var i = XNumber.INFINITY;
var i = XNumber.NEGATIVE;
var i = (XNumber) 1;
var i = (XNumber) 500;
var i = (XNumber) -1000;
如果没有,我有什么可能做到的?
答案 0 :(得分:2)
如果值匹配,则enum
可以转换为int
。请注意,您可以为枚举值分配数值。例如,
namespace Test
{
enum SpecialValue
{
Zero = 0,
Five = 5,
Seventy = 70
}
private void method()
{
var five = (SpecialValue)5; // == SpecialValue.Five
int seventy = (int)SpecialValue.Seventy; // == 70
}
}
答案 1 :(得分:0)
最简单的方法可能是将int
和enum
放入struct
。您可以定义转换运算符和算术运算符,以便更轻松地使用您的类型。
e.g。
struct XNumber {
private enum SpecialValue { Normal, Negative, Infinity}
private int value;
private SpecialValue kind;
public XNumber Infinity = new XNumber { kind = SpecialValue.Infinity };
public XNumber Negative = new XNumber { kind = SpecialValue.Negative };
public static implicit operator XNumber(int value) {
if (value < 0)
return new XNumber { kind = SpecialValue.Negative };
return new XNumber { value = value };
}
// ...
}
类似的东西,取决于您的确切需求。
另一种方法是,如果您不需要int
的全部范围,则使用无穷大和负值的特殊值,您只需要存储int
。仍然是struct
,你仍然应该定义转换和运算符,以便一切都匹配。虽然你可以只用enum
来逃避,正如Wai Ha Lee指出的那样,我不推荐它,因为你本质上有一个自己的类型,它有自己的语义(只是那些碰巧有点支持{ {1}}在C#中。