2010-04-09 27 views
5

它們通常涉及泛型。但是有些泛型方法沒有它們,並不是所有的擴展方法都有。Intellisense中LINQ方法的尖括號是什麼意思? (包含<>,Count <>,Distinct <>等)

自從第一天起他們就一直「在那裏」,我們都看到了它們;但我意識到我仍然不知道他們的意思,我無法在任何地方找到答案。現在它真的讓我煩惱。谷歌只是變成了關於XML的結果等。

這是正式記錄在任何地方嗎?謝謝。

編輯:那太棒了。由於我剛剛創建了一個帳戶來製作我的第一個Stack Overflow帖子,以便爲這個燃燒的問題獲得答案;我不允許發佈我漂亮的Intellisense圖片,或者創建一個新的標籤「尖括號」。我愛堆棧溢出,但是......多麼歡迎!

也許我的問題是,他們實際上並沒有被稱爲「尖括號」...... ??

總之,我想如果你真的想看到我美麗的截圖,你可以手動去:

Distinct>< http://www.freeimagehosting.net/uploads/6a6c2f3268.png

凹凸我請讓我可以將其包含在後,表示感謝。 ;)

+0

ReSharper隱藏它們...當你安裝它時,你可以轉到'選項 - >智能感知 - >常規'並選擇ReSharper自己的智能感應或VS – tanascius 2010-04-09 13:07:51

+0

感謝大家的答案和投票。我知道泛型,但不確定尖括號的具體名稱(在Intellisense中)。 我想我的困惑是看到兩個版本的東西,如:new int [] {1,2} .Sum ...一個(沒有尖括號)一個泛型類的擴展方法,括號)爲通用類的* generic *擴展方法! 我讚賞解釋和確認。 – 2010-04-09 13:35:08

+0

順便說一句,沒有人有一個MSDN或其他鏈接專門針對Intellisense中的該標記的通用方法嗎?不是我不相信你......我很奇怪我找不到任何東西*。 – 2010-04-09 13:42:57

回答

8

這些方法是通用的。

但是,編譯器會自動從方法調用中推斷泛型類型參數,所以在調用方法時不需要使用方括號。

例如,如果你有一個IEnumerable<int> myNumbers,下列四個語句是等價的:

myNumbers.Count(); 
myNumbers.Count<int>(); 
Enumerable.Count(myNumbers); 
Enumerable.Count<int>(myNumbers); 

在第一和第三個電話時,編譯器推斷int參數,因爲myNumbersIEnumerable<int>

Count擴展方法被聲明(在System.Core.Dll)所示:

public static int Count<TSource>(this IEnumerable<TSource> source); 
+1

不錯的解釋,謝謝! – 2010-04-09 13:36:20

2

它們是泛型。當你使用這些函數時,你並不總是必須加入這些函數,因爲在很多情況下,編譯器可以通過上下文找出它。

1

他們是generic method signatures.我建議你學習他們。

一些有趣的事情要注意泛型:首先,它們在編譯後不是通用的。在運行應用程序之前,所有類型都已解決並設置完畢。其次,編譯器經常能夠弄清楚你的意思,所以你不必明確表達它的意思。例如,如果方法簽名是DoSomething<T>(t withThis),則可以調用此方法,如DoSomething<string>("with me"),則可以省略通用類型:DoSomething("with me")。這是因爲編譯器將傳入方法的類型看作參數,並計算出方法的類型參數。真棒。

+0

良好的聯繫。這就是我一直在尋找的東西,謝謝。 – 2010-04-09 13:35:53

0

Jon Skeet的書C# in Depth進入了泛型和linq的細節,併爲我清除了很多 - 我可以強烈推薦它。

相關問題