在C#中使用`default`关键字是什么?
- 在C#中使用
default
关键字是什么? - 它是用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的默认值价值作为先行的方式来避免你的进一步(未来)代码中的错误。