2011-10-07 103 views
1

我有一个用户控件下面的代码:C#枚举 - 是否为空?

public partial class MyControl : System.Web.UI.UserControl 
{  
    public Enums.InformationSubCategory SubCategory { get; set; } 

    ...omitted code 
} 

Enums.InformationSubCategoryenum我在别处定义的想法是,我可以这样做:

Example 1. <my:MyControl runat="server" SubCategory="Food" ...... /> 
Example 2. <my:MyControl runat="server" ...... /> 

如果我不去为SubCategory指定一个值,SubCategory的值在MyControl的代码隐藏中会是什么?是null还是应用默认值?我注意到,与int属性,它默认为零。

回答

2

领域得到初始化为default(T)。记住某种类型默认值的简单方法是在明显的实现中它对应于二进制零。

对于enum这意味着底层整数类型被设置为0默认情况下,这对应于在枚举所定义的第一个值。

这就是为什么它是常见的一个枚举None命名的第一个值。

+0

'在枚举中定义的第一个值' - 假设没有明确的值被赋值,即。 'enum Foo {Bar = 1,None = 0}' –

+0

是的,这就是为什么我说“默认”。 – CodesInChaos

+0

@CodeInChaos如果我已将非零整数分配给所有枚举成员,该怎么办? – Arj

0

这将是0,因为你的enum默认是基于Int32

+0

启动这将是0,但也可以是一个字节或短。 –

+0

@亨克 - 这就是为什么我说'默认'。 –

+0

是的,你是对的。我认为编译器可以自由选择。 http://msdn.microsoft.com/en-us/library/cc138362.aspx –

0

默认基础类型枚举元素为int。默认情况下,第一个枚举的值为0,并且每个相继的枚举的值增加1。例如:

enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; 

在该枚举,星期六是0,太阳是1,星期一是2,和等等。枚举器可以有初始化器来覆盖默认值。

enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri}; 

在此列举,元件的序列被强制为1而不是0

+0

关于'enum's的很好的解释,但是没有回答这个问题! – Arj