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

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

default关键字是上下文的,因为它具有多种用法。 我猜你正在引用新的C#2,它返回一个types的默认值。 对于引用types,这是null ,对于值types,这个新实例全部为零。

这里有一些例子来说明我的意思:

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

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

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

最常用的是generics ; 虽然它适用于“常规”types(即default(string)等),但这在手写代码中是非常罕见的。

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

在generics中,经典用法是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; } 

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

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

第二个用法是在generics的上下文中,当初始化一个genericstypes实例时,从C#2.0开始可用:
http://msdn.microsoft.com/en-us/library/xwth0h0d(VS.80).aspx

“default”关键字(除了switch-case)可以帮助你初始化一个对象的实例,比如class,list和更多的types。它的使用是因为它的通用属性,它可以帮助你在不知道它的时候指定types的默认值价值作为先行的方式来避免你的进一步(未来)代码中的错误。