正确理解c# default关键字


在 C# 中,default 关键字有多种用途,具体取决于它所用于的上下文。下面我会详细解释每种用法和其含义:

1. 默认值

default 关键字可以用于获取类型的默认值。它的行为取决于所用类型的不同:

  • 值类型(Value Types):对于值类型,default 返回该类型的零值。例如,对于整数类型 intdefault(int) 返回 0;对于布尔类型 booldefault(bool) 返回 false;对于浮点类型 floatdefault(float) 返回 0.0f,依此类推。

    int defaultInt = default; // 等价于 int defaultInt = default(int);
    bool defaultBool = default; // 等价于 bool defaultBool = default(bool);
    
  • 引用类型(Reference Types):对于引用类型,default 返回 null。例如,对于字符串类型 stringdefault(string) 返回 null

    string defaultString = default; // 等价于 string defaultString = default(string);
    
  • 结构体类型(Struct Types):对于结构体类型,default 返回该结构体的每个字段或属性的默认值。

    struct Point
    {
        public int X;
        public int Y;
    }
    
    Point defaultPoint = default; // 等价于 Point defaultPoint = default(Point);
    // defaultPoint.X 和 defaultPoint.Y 都会被设置为它们各自的默认值,即0
    

2. 泛型中的默认值

在泛型代码中,default 可以用于获取任意类型参数的默认值。这对于在泛型类、方法或委托中初始化变量或清除集合非常有用。

public T GetValue<T>()
{
    return default(T);
}

int defaultInt = GetValue<int>(); // 返回0
string defaultString = GetValue<string>(); // 返回null

3. Switch 语句中的默认分支

switch 语句中,default 用作默认分支,当没有任何 case 匹配时执行。它通常位于 switch 语句的最后一个分支。

int number = 5;
switch (number)
{
    case 1:
        Console.WriteLine("One");
        break;
    case 2:
        Console.WriteLine("Two");
        break;
    default:
        Console.WriteLine("Other");
        break;
}

在上面的例子中,如果 number 不等于 12,则会执行 default 分支,输出 "Other"。

4. 类型参数的默认值约束

在泛型约束中,default 可以用作类型参数的默认值约束,表示该类型参数必须有一个无参构造函数,并且可以通过 new() 约束指定。

public class MyClass<T> where T : new()
{
    public T GetNewInstance()
    {
        return new T(); // 使用 new() 约束,调用类型 T 的无参构造函数
    }
}

总结

default 关键字在 C# 中用途广泛,可以用于获取各种类型的默认值,作为 switch 语句的默认分支,以及在泛型中初始化类型参数等。理解 default 的正确用法可以帮助提高代码的清晰度和可读性,并且是 C# 编程中必备的基础知识之一。


原文链接:codingdict.net