在編寫泛型類或者泛型方法的時候,有時候可能需要將型別參數T的預設值賦值給一個型別參數T的一個變數。可是,在泛型沒有具體執行個體化以前,T到底代表的資料類型是什麼,這個不得而知。T到底是實值型別還是參考型別?如果T為實值型別,則它是數值還是結構?
給定參數化型別T的一個變數t,只有當T為參考型別時,語句t = null才有效;只有當 T 為數實值型別而不是結構時,語句 t = 0才能正常使用。
解決方案是使用default關鍵字,此關鍵字對於參考型別會返回空,對於數實值型別會返回零。對於結構,此關鍵字將返回初始化為零或空的每個結構成員,具體取決於這些結構是實值型別還是參考型別。
例子DefaultValue使用default關鍵字測試了一些類型的預設值。
namespace DefaultValue
{
class Point
{
}
struct Student
{
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(default(int));
Console.WriteLine(default(double));
Console.WriteLine(default(string));
Console.WriteLine(default(Point));
Console.WriteLine(default(Student));
Console.ReadKey();
}
}
}
程式啟動並執行結果是
下面的代碼示範了default使用
public class GenericList<T>
{
private class Node
{
//...
public Node Next;
public T Data;
}
private Node head;
//...
public T GetNext()
{
T temp = default(T);
Node current = head;
if (current != null)
{
temp = current.Data;
current = current.Next;
}
return temp;
}
}