请告诉我c#.net中“default”关键字的用法

时间:2010-05-25 11:24:29

标签: c# default

我有以下代码:

我有一个枚举:

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

和m这样使用这个枚举:

 HardwareInterfaceType type = default(HardwareInterfaceType);

请告诉我关键字“默认”在这里做什么?有什么用?

4 个答案:

答案 0 :(得分:7)

我认为默认值为0,因此您将生成无效的HardwareInterfaceType。我个人不喜欢这种枚举编码。 IMO更清楚的是定义Enum值为“Undefined”或“None”,然后将变量初始化为该值。

带枚举的“陷阱”之一是它们可以初始化为枚举中不存在的值。如果使用“default”关键字,原始程序员可能会认为enum将在Enum定义中初始化为某个有效值。事实并非如此,IMO根本不能很好地利用“默认”关键字。

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

答案 1 :(得分:5)

default将提供语言类型的默认值 - 在数值的情况下,以及扩展名,枚举,零。对于引用类型,默认值为null

它更常用于泛型,其中类型不是预先知道的。

答案 2 :(得分: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

答案 3 :(得分:2)

我认为当您不必创建任何类对象的新实例时,使用默认关键字:

一种方式就是这样

HardwareInterfaceType type = new HardwareInterfaceType();

第二种方式也是这样

HardwareInterfaceType type = default(HardwareInterfaceType);

上面的代码将创建hardwareinterfacetype的对象,但不会创建任何新的 存储器中。