簡體   English   中英

C#中的類型推斷

[英]Type inference in C#

我知道msdn應該是第一個去的地方,它將在我得到這里的獨家新聞之后。 作為技術規范的一部分,msdn不會真正提供的是我現在要問的問題:

  1. 主題在日常開發過程中的用途如何?
  2. 它是否與clr中的匿名類型具有任何形狀或形式的相關性?
  3. 如果沒有它,它還能做什么呢?
  4. 哪些.net功能依賴於主題,如果不作為框架的一部分就不可能存在?

為了記錄這個問題的細節,如果使用lambdas和類型推斷調用該方法,那么知道(在偽代碼中)編譯器如何實際確定所需類型將是非常有趣的。

我期待看到關於如何定位該類型的編譯器邏輯流程。

類型推斷發生在C#的許多地方,至少如下:

  1. var關鍵字,它告訴編譯器根據初始化變量來推斷(推導)變量的正確類型
  2. 只要可以從參數中推導出類型參數,就可以將類型參數從通用方法調用中刪除
  3. 能夠從lambda表達式參數中省略類型,只要它們可以推導出來

並回答你的問題:

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. 它是語法糖。
  2. 不是我知道的。
  3. 它大大簡化了程序員的工作。
  4. LINQ。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM