在.NET 3.5中是否可以指定枚举类型?

时间:2010-05-12 06:40:55

标签: c# .net .net-3.5 enums

我有一个映射到一堆int

的枚举器

例如

enum MyEnum {
Open = 1,
Closed = 2,
Exit = 4

}

我发现,当我想将它分配给一个整数时,我必须先将其强制转换。

int myEnumNumber = **(int)** MyEnum.Open;

是否可以指定枚举的类型,以便隐含在枚举中为任何值分配了一个整数?这样,如果我想使用它,我不需要继续将其转换为int

感谢

4 个答案:

答案 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关于操作的内容,而不是内容。