在C#中使用`default`关键字有什么用?

use*_*546 69 c#

  1. defaultC#中关键字的用途是什么?
  2. 它是在C#3.0中引入的吗?

And*_*are 89

default关键字的上下文,因为它具有多种用途.我猜你指的是它更新的C#2意思,它返回一个类型的默认值.对于引用类型null,对于值类型,这个新实例全部归零.

以下是一些示例来说明我的意思:

using System;

class Example
{
    static void Main()
    {
        Console.WriteLine(default(Int32)); // Prints "0"
        Console.WriteLine(default(Boolean)); // Prints "False"
        Console.WriteLine(default(String)); // Prints nothing (because it is null)
    }
}
Run Code Online (Sandbox Code Playgroud)


Meh*_*hin 79

您也可以使用默认值来获取a的默认值Generic Type.

public T Foo<T>()
{
    .
    .
    .
    return default(T);
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*ell 32

最常见的用途是仿制药 ; 虽然它适用于"常规"类型(即default(string)等),但这在手写代码中并不常见.

但是,我在进行代码生成时会使用这种方法,因为这意味着我不需要对所有不同的默认值进行硬编码 - 我可以default(TypeName)在生成的代码中找出类型和用法.

在泛型中,经典用法是TryGetValue模式:

public static bool TryGetValue(string key, out T value) {
    if(canFindIt) {
        value = ...;
        return true;
    }
    value = default(T);
    return false;
}
Run Code Online (Sandbox Code Playgroud)

这里我们必须指定一个值来退出方法,但调用者不应该真正关心它是什么.您可以将此与构造函数约束进行对比:

public static T CreateAndInit<T>() where T : ISomeInterface, new() {
    T t = new T();
    t.SomeMethodOnInterface();
    return t;
}
Run Code Online (Sandbox Code Playgroud)


jri*_*sta 12

默认关键字取决于它的使用环境不同的语义.

第一种用法是在switch语句的上下文中,自C#1.0起可用:http:
//msdn.microsoft.com/en-us/library/06tc147t(VS.80).aspx

第二种用法是在泛型的上下文中,在初始化泛型类型实例时,自C#2.0以来可用:http:
//msdn.microsoft.com/en-us/library/xwth0h0d(VS.80).aspx


小智 5

“default”关键字(除了 switch-case 之外)可以帮助您初始化对象的实例,例如类、列表和更多类型。使用它是因为它的通用属性,当您事先不知道类型的值时,它可以帮助您分配类型的默认值,以避免进一步(未来)代码中出现错误。