枚举变量总是被初始化?

时间:2011-03-23 11:32:23

标签: c# variables enums

我需要一个枚举类型变量,它不会自动初始化为第一个元素的值。 有什么方法可以做到吗?

6 个答案:

答案 0 :(得分:6)

枚举变量不会始终初始化为枚举的第一个值。

例如/ static变量,它们被初始化为" 0"枚举的值 - 可能不是命名值,例如

enum Color
{
    Red = 1,
    Blue = 2,
    Green = 3
}

Color c; // This will be 0

局部变量不会自动初始化 - 必须在可以读取它们的第一个点之前明确分配它们,就像任何其他变量一样。

您并不十分清楚自己想要实现的目标 - 如果您能提供更多有关背景的详细信息,那将会有很大帮助。使用可空值类型可能可能是您想要的,或者您可能只想在构造函数中强制进行初始化,例如。

答案 1 :(得分:4)

从技术上讲,枚举初始化为0,而不是第一个值:

enum Test {
    Second = 1,
    Third = 2
}

Test test;

void Main()
{
    Console.WriteLine("{0}", (int)test);
}

// Result: 0

来自MSDN:The default value of an enum E is the value produced by the expression (E)0. http://msdn.microsoft.com/en-us/library/sbbt4032(v=vs.80).aspx

答案 2 :(得分:3)

没有办法,除非你使用Nullable<SomeEnum>

答案 3 :(得分:2)

您可以考虑将其设为可以为空的

答案 4 :(得分:2)

枚举的基础数据类型为int(默认情况下),就像int wi总是被初始化一样,枚举也是如此。

最好的办法是将未初始化的值添加为枚举中的第一个条目。

所以例如

public enum MyEnum{ Uninitialized, EnumValue1, EnumValue2, ... };

然后创建它的实例

MyEnum enumInstance;

现在它仍然会被初始化为枚举中的第一个元素,但你也知道它意味着你还没有初始化它。

答案 5 :(得分:0)

enum关键字用于声明枚举,这是一种由称为枚举器列表的命名常量组成的不同类型。

如果您希望在枚举中表示未知值,可以通过添加值为0的未知元素来实现。
您可以将该字段声明为Nullable< MyNullableEnum >

一个有用的链接: