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

时间:2009-11-13 05:43:35

标签: c#

  1. C#中的default关键字有什么用处?
  2. 是否在C#3.0中引入?

6 个答案:

答案 0 :(得分:84)

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)
    }
}

答案 1 :(得分:75)

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

public T Foo<T>()
{
    .
    .
    .
    return default(T);
}

答案 2 :(得分:32)

最常见的用途是with generics;虽然的工作用于“常规”类型(即default(string)等),但这在手写代码中并不常见。

但是,我确实在进行代码生成时使用了这种方法,因为这意味着我不需要对所有不同的默认值进行硬编码 - 我只能弄清楚类型并使用default(TypeName)生成的代码。

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

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

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

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

答案 3 :(得分:11)

default关键字具有不同的语义,具体取决于其使用上下文。

第一种用法是在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

答案 4 :(得分:3)

&#34;默认&#34;关键字(除了switch-case)可以帮助你初始化一个对象的实例,如类,列表和更多类型它的使用是因为它的通用属性,当你不知道它的值为advance时,它可以帮助你分配类型的默认值避免进一步(未来)代码出错的方法。

答案 5 :(得分:-1)

呼应并强调它在泛型中的用途,除了代码生成之外,别无其他。

如果您必须初始化为默认值(我的书中已经可疑有臭味),请弄清楚。随便吧。