2014-02-14 39 views
0
public void DisplayValue<T>(T field, string fieldname) 

T在上面的代碼中代表什麼?T在C#中代表什麼?

這樣做的好處是什麼?

我們可以在哪裏使用?

+1

這麼多副本......必須儘快關閉。 – Sachin

+1

它確實來自德爾福(Anders Hejlsberg)的父親,他也是開發C#語言團隊的首席架構師。在Delphi中,我們使用T來指定它是一種類型,例如TClient等。Anders在C#泛型中應用它是有道理的。我只希望你給泛型類型至少一些有意義的名稱,而不僅僅是T,而是例如TCommand。 – 2014-02-14 11:07:24

回答

1

它是一個通用類型參數。

泛型類型參數允許您在編譯時爲方法指定任意類型T,而無需在方法或類聲明中指定具體類型。

例如:

public T[] Reverse<T>(T[] array) 
{ 
    var result = new T[array.Length]; 
    j=0; 
    for(int i=array.Length; i>= 0; i--) 
    { 
     result[j] = array[i]; 
     j++; 
    } 
    return result; 
} 

逆轉數組中的元素。這裏的關鍵是數組元素可以是任何類型,並且該函數仍然可以工作。您在方法調用中指定類型;型式安全仍然有保證。

因此,要扭轉一個字符串數組:

string[] array = new string[] { "1", "2", "3", "4", "5" }; 
var result = reverse(array);Will produce a string array in result of { "5", "4", "3", "2", "1" } 

這有同樣的效果,如果你曾經被稱爲一個普通的(非通用)方法,看起來像這樣:

public string[] Reverse(string[] array) 
{ 
    var result = new string[array.Length]; 
    j=0; 
    for(int i=array.Length; i >= 0; i--) 
    { 
     result[j] = array[i]; 
     j++; 
    } 
    return result; 

}編譯器看到數組包含字符串,所以它返回一個字符串數組。類型字符串被替換爲T型參數。


泛型類型參數也可用於創建泛型類。

在你給SampleCollection的例子中,T是任意類型的佔位符;這意味着SampleCollection可以表示一個對象集合,它是您在創建集合時指定的對象類型。

所以:

var collection = new SampleCollection<string>();

創建一個集合,可以容納字符串。上面所示的Reverse方法,以一種稍微不同的形式,可以用來反轉集合的成員。

+0

將T包含在方法名中時,T的重要性如何?例如「Reverse 」 –

+1

它表示它是一種通用方法.. –

1

類型參數T:列表中元素的類型。

根據MSDN文檔。

這樣做的好處是什麼?

該方法可以採取匿名類型的列表。

我們可以在哪裏使用?

例如,當在幾個類型的多個列表上進行相同的操作時。

2

Generics (C# Programming Guide)

...通過使用泛型類型參數T,你可以寫一個類 其他客戶端代碼可以使用,而不會產生 運行時的成本或風險管型或裝箱操作