C#類型推斷有多好?我在某處讀到它僅用於局部變量?它是否適用於課堂級別的屬性?對於方法簽名?方法返回類型?等C#類型推斷有多好?
16
A
回答
36
有幾個主要種類型推理的C#:
隱式類型的局部變量:
- 只有局部變量
- 只有當值被指定爲聲明的一部分
- 值不能爲空
- 值不能爲lambda表達式,匿名方法或方法組(無鑄造)
- 值的編譯時類型被用於變量的任何進一步的用途是僅檢查的可變
- 類型針對由初始聲明+分配確定的類型;他們對推理本身沒有貢獻。
通用方法類型自變量推斷,即您沒有在對泛型方法的調用中指定類型參數,編譯器根據參數計算出它們。
- 將是非常方便有這個泛型類型以及泛型方法
- 真的很方便呢 - LINQ將是很難或根本無法使用,沒有它
- 匿名類型是沒有它 相當無用
- 非常複雜的規則,即使該規範是錯在一些地方
Lambda表達式的參數類型推斷
- 編譯器試圖制定出基於在其中它的使用
- 通常工作得很好,在我的經驗
數組類型推斷,如上下文的類型lambda表達式的參數的
new[] { "Hi", "there" }
代替new string[] { "Hi", "there" }
- 各種小的限制,沒有重大
我可能已經忘記了其他的一些功能可能被稱爲「類型推斷」。我懷疑你主要是對第一個感興趣,但其他人可能也與你有關:)
1
它只適用於局部變量,據我所知。
7
它只能用於局部變量,但它可以檢測許多不同形式的類型。
var myVar = SomeMethodThatReturnsInt(); //will know it's an int
var myIntList = new List<int>(); //this works too (although this is technically not type inference)
var myOwnVar = new { Name = "John", Age = 100 }; // will create own type and infer that
編輯:另一個Tye推論的例子是與蘭巴達斯。 IE:
var myList = new List<int>();
//add some values to list
int x = myList.Find(i => i == 5); // compiler can infer that i is an int.
相關問題
- 1. Objective-C類型推斷
- 2. 類型推斷有多昂貴?
- 3. 類型推斷的好處是什麼?
- 4. C#:爲什麼泛型類型推斷工作時有多個類型參數?
- 5. C#泛型委託類型推斷
- 6. C#5.0泛型:參數類型推斷
- 7. C#類型推斷,泛型和接口
- 8. 推斷類型泛型類
- 9. C#返回類型推斷不好的做法?
- 10. F#類型推斷
- 11. 偏類型推斷
- 12. 「VAR」 類型推斷
- 13. 類型推斷 - 無法推斷Monad
- 14. 推斷類型的模板鍵入C++
- 15. 推斷類型在lambda參數C++ 11
- 16. C#編譯器類型推斷差異
- 17. 在C中的類型推斷#
- 18. C++中的自動類型推斷
- 19. C#推斷類型與約束
- 20. C++類型推斷遞歸函數
- 21. 泛型和類型推斷
- 22. Java泛型 - 類型推斷
- 23. Scala推斷的類型參數 - 類型範圍推斷爲'Nothing'
- 24. 多個泛型類型的類型推斷參數
- 25. 有沒有辦法解決這個C#類型推斷失敗?
- 26. 有關單子的Haskell類型推斷
- 27. 類型推斷沒有在斯卡拉
- 28. 類型推斷和目標類型
- 29. 如何推斷C++中內部類型的外部類型?
- 30. java通用類型推斷
爲什麼第二個例子不是技術上的類型推斷? – 2011-02-03 17:50:41