2011-11-24 59 views
4

我做了下面的测试代码:枚举与价值没有场“0”

public enum Test 
{ 
    One = 1, 
    Two = 2 
} 
public class User 
{ 
    public Test Flag { get; set; } 
} 

,我用这样的:

​​

值将null,因为它看起来像User.Flag0初始化。这是为什么? 0对于我的枚举不是有效的值。不应该使用第一个有效值(1)进行初始化吗?

+0

看到这个答案:http://stackoverflow.com/q/1165414/25727 – Jan

+0

[Enum初始值问题(C#)]的可能重复(http://stackoverflow.com/questions/1165402/question-on-initial-value-of-an-enum-c ) – jgauffin

+0

@Jan:谢谢。没有看到那个。将我自己的问题作为一个副本 – jgauffin

回答

2

枚举由整数类型支持并表现得像他们(主要)。

不幸的是,这意味着您可以将的任何值在底层类型上有效赋值给枚举 - 没有检查。

在默认初始化的情况下,这将是基础类型的默认值,对于整数类型是0

你可以做到这一点为好,它会编译并运行:

var value = (Test)43; 

或许重新定义枚举,如下所示:

Enum类有一些方便的方法来工作使用枚举 - 例如IsDefined来查找变量是否包含枚举的定义值。

2

它初始化为基础类型的默认值,即intdefault(int)0

1

基础类型枚举的是int类型默认和默认值明显是0(可以指定自定义基本类型,但只有原始数字像enum CustomEnum : byte

1.10枚举,C#规格:

每个枚举类型都有一个相应的整型,称为枚举类型的底层 类型。不明确声明 基础类型的枚举类型具有基础类型int。枚举类型的 存储格式和可能值范围由其基本类型 确定。枚举类型可以采用的值集合是 ,不受其枚举成员的限制。具体而言,枚举的基础类型的任何值都可以转换为枚举类型,并且该枚举类型的有效值是不同的。

-1

GetField采取属性名的名称和要传递的user.Flag

枚举值你应该写

var value = (Test) typeof(Test).GetField("Flag").GetValue(user); 
+0

尝试编码... – jgauffin

+0

感谢您指出。我误解了这个问题。 –

+0

其他三个答案应该给你一个提示;) – jgauffin