2011-02-03 100 views
3

我知道MSDN應該是第一個去的地方,它會在我拿到勺子之後。作爲技術規範的一部分,msdn並不真正提供的是我現在要問的內容:在C中的類型推斷#

  1. 在日常的開發過程中,主題究竟有多有用?
  2. 它與clr中的匿名類型有任何形狀或形式的關聯嗎?
  3. 如果沒有它,那它有什麼作用?
  4. 哪個.net功能依賴於主題,並且不作爲框架的一部分存在?

要帶一個便條具體情況的問題,這將是非常有趣的瞭解(在僞代碼)的編譯器如何能真正確定所需的類型,如果方法,使用lambda表達式和類型推斷稱爲

我期待看到如何找到該類型的編譯器邏輯流程。

+0

這是一個很胖的問題。 – spender 2011-02-03 01:32:33

回答

9

類型推斷出現在許多地方在C#中,至少有以下幾點:

  1. var關鍵字,它告訴編譯器從推斷(推斷)的正確類型的變量是什麼你
  2. 初始化
  3. 離開類型參數出一個通用的方法調用的,只要它們可以從參數推導出的能力
  4. 從λ表達式參數漏下的類型,只要它們可以推斷
的能力

並回答您的問題:

1)它採用所謂的「LINQ方法」尤其是在節省了大量的打字。比較例如

List<string> myList = new List<string>(); 
// ... 
IEnumerable<string> result = myList.Where<string>((string s) => s.Length > 0) 
    .Select<string, string>((string s) => s.ToLower()); 

var myList = new List<string>(); 
// ... 
var result = myList.Where(s => s.Length > 0).Select(s => s.ToLower()); 

2)我不知道你所說的「相關性」的意思,但沒有var關鍵字,你不能有變量引用匿名類型的類型安全的方式(您始終可以使用objectdynamic),這在使用匿名類型時非常重要。

3)據我所知,沒有什麼。這只是一個便利功能。例如,它的缺席會使上述匿名類型的用處不大,但它們大多也是一種便利功能。

4)我認爲3)也回答了這個問題。

+1

這是一個很好的開始(對於這樣一個廣泛的問題!),但是,匿名類型可以存在(具有更多有限的用處),而不用`var`。想象一下LINQ表達式中的中間體。 – 2011-02-03 05:32:54

2
  1. 這是句法糖。
  2. 不是我所知道的。
  3. 它極大地簡化了程序員的工作。
  4. Linq。