2009-11-13 21 views
58
  1. C#中default關鍵字的用法是什麼?
  2. 是否在C#3.0中引入?
+0

http://stackoverflow.com/questions/367378/returning-a-default-value-c –

+0

[看到這個!](http://msdn.microsoft.com/en-us/library/vstudio/83fhsxwc .aspx) – MasterMastic

+0

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/default –

回答

79

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

您也可以使用默認值來獲取Generic Type的默認值。

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

+1;國際海事組織這是最常見的用法... –

30

最常見的用途是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; 
} 
+0

+1在哪裏T:新()與默認(T)。我更喜歡T:new(),因爲它調用泛型類的完整構造函數。但是當new()約束不能被滿足時,default(T)是非常有用的。即不可變/單獨禁止new()。 –

3

「默認」關鍵字(除了的switch-case)可以幫助你初始化像類,列表和更多類型的對象的實例它的使用,因爲它的通用性當你不知道它的價值時,它可以幫助你分配類型的默認值,以避免在未來的代碼中出現錯誤。

相關問題