我有一个映射到一堆int
的枚举器例如
enum MyEnum {
Open = 1,
Closed = 2,
Exit = 4
}
我发现,当我想将它分配给一个整数时,我必须先将其强制转换。
int myEnumNumber = **(int)** MyEnum.Open;
是否可以指定枚举的类型,以便隐含在枚举中为任何值分配了一个整数?这样,如果我想使用它,我不需要继续将其转换为int
感谢
答案 0 :(得分:3)
不,这是故意的 - 枚举有一个基础数据类型,但它们不被认为是相同的,因为这可能会产生很多错误的可能性,这种方式很容易捕获。
例如,你说了很多关于必须一直投射数字的事情 - 我不记得上次我做了一个枚举的演员。我做了很多C#编程。
答案 1 :(得分:2)
enum MyEnum : int
{
Open = 1,
Closed = 2,
Exit = 4
}
这也提到here。
但是,这不允许你避免强制转换,这允许它与Int32以外的类型一起使用(这是默认的枚举类型)。
简而言之,是的,你可以指定一个类型但是没有,你仍然需要投射它。
答案 2 :(得分:1)
将枚举值转换为整数,有一些很好的理由,可能还有很多不好的理由,我认为你有充分的理由;)。
如果你正在进行大量的int转换,扩展方法可能会有所帮助,这里有一个快速的扩展方法:
public static int EnumCast(this Enum theEnum)
{
return (int)((IConvertible)theEnum);
}
测试中使用的一个例子:
[Test]
public void EnumCastTest()
{
Assert.That(MyEnum.Exit.EnumCast(), Is.EqualTo(4));
}
答案 3 :(得分:0)
您可以使用以下方式指定其他基础类型:
enum : byte MyEnum { ... }
但是这并没有消除转换为字节的需要(如果你真的想要)。 C#中的枚举允许您通常只是忘记基础类型,除非您的applciation需要它。
你真的需要基础整数吗?可以在数据库中实际存储枚举值的字符串表示形式,然后在稍后的点see this question重新创建字符串中的枚举值。
MSDN提供a good tutorial关于操作的内容,而不是内容。