2010-05-25 43 views

回答

7

我相信默认是0,所以你将有一个无效的HardwareInterfaceType生成。我个人不喜欢这种编码的枚举。国际海事组织更清楚定义一个枚举值“未定义”或“无”,然后初始化该变量。

带枚举的“问题”之一是它们可以被初始化为枚举中不存在的值。原来的程序员可能会认为如果Enum定义中使用“default”关键字,enum将被初始化为一些有效值。不正确,而IMO完全不能很好地使用“默认”关键字。

var foobar = default(HardwareInterfaceType); 
Console.WriteLine(Enum.IsDefined(typeof(HardwareInterfaceType), foobar)); //returns false 
Console.WriteLine(foobar); //returns 0 
+0

+1 – Christian 2010-05-25 11:37:33

4

默认关键字主要用于编写通用代码时。

在泛型类和方法中,出现的一个问题是如果不知道T是引用类型还是值类型,如何将默认值分配给参数化类型T,如果T是值类型,无论它是数值还是结构。

在你的情况下,分配0

static void Main(string[] args) 
    { 

     HardwareInterfaceType type = default(HardwareInterfaceType); 
     Console.WriteLine(type.ToString()); 

     type = HardwareInterfaceType.Gpib; 
     Console.WriteLine(type.ToString()); 

     Console.ReadLine(); 
    } 

    public enum HardwareInterfaceType 
    { 
     Gpib = 1, 
     Vxi = 2, 
     GpibVxi = 3, 
    } 

    //output 
    0 
    Gpib 
+0

在我的情况是什么分配? – 2010-05-25 11:32:59

+1

在你的情况下,它将“未定义”值赋值为0. – 2010-05-25 11:38:38

5

default将一种语言类型提供默认值 - 在数值的情况下,推而广之,枚举为零。对于参考类型,默认值为null

它更常用于类型未知的泛型。

2

我认为,当你没有创建任何类对象的新实例的默认键词是用来说:

一种方式是这样的

HardwareInterfaceType type = new HardwareInterfaceType(); 

和第二路是这样也

HardwareInterfaceType type = default(HardwareInterfaceType); 

上述代码将创建hardwareinterfacetype的对象,但它不会创建e任何新的 内存。

相关问题