隱式類型和匿名類型之間是相同還是任何區別?如果不同,那麼隱式類型和匿名類型之間的主要區別是什麼?隱式類型與匿名類型
回答
有一個巨大的差別:
隱式類型(本地)變量,是哪種類型的未明確給出變量:
var i = new StringBuilder();
現在,i
是隱含StringBuilder
類型 - 命名類型。
另一邊匿名類型沒有名字,他們是匿名:
var x = new { Foo = "Bar" };
x是一個匿名類型的現在,隨着一個只讀屬性Foo
。
匿名類型只能用於聲明範圍。因此,您可以將其用於本地任務,並且不能在外部範圍中使用它。
引入了匿名類型來與linq一起使用,以實現簡單的分組和轉換。 主要目標是避免在單一範圍內使用的顯式類型聲明。
List<TypeOne> firstList;
List<TypeTwo> secondList;
var joined = firstList
.GroupJoin(secondlist, i => i.KeyOfTypeOne, i => i.KeyOfTypeTwo, (first, second) => new { First = first, Second = second});
所以新的匿名類型聲明,你可以用它在同樣的情況下,但不能發送到當前範圍的邊界作爲一個強類型的對象
TypeName Method() // you can't specify a type here except object or dynamic
{
...
return joined;
}
但你可以本地使用它,沒有任何限制
return joined.Where(i => i.Second.Any()).Select(i => i.First);
而在另一方面,隱式類型變量是用來讓你使用匿名類型的對象。 Compilator會調查你的代碼,並把真正的類型,而不是var關鍵字。
var inst = new {Name = "a";}
compilator將產生一個匿名類型「{名稱=‘A’;}」,並用它在你的代碼替換變種。
你確定你不能通過動態類型返回匿名類型嗎? –
您可以通過對象類型返回它,但我沒有看到任何使用它的理由。 –
但是,我沒有看到太多的理由,但是,你在你的帖子中說它會拋出一個編譯錯誤。 –
從Implicitly Typed Local Variables (C# Programming Guide):
局部變量可以給出VAR代替 顯式類型的推斷「類型」。 var關鍵字指示編譯器根據初始化語句右側的表達式推斷變量類型 。推斷類型可以是內置類型,匿名類型,用戶定義類型或.NET Framework類庫中定義的類型。
另外:
了var關鍵字並不意味着 「變種」重要的是要理解,並不表明這個變量是弱類型,或 後期綁定。這只是表示編譯器確定並指定 最合適的類型。
有匿名類型和隱式類型變量之間的關係的關鍵:
在許多情況下使用VAR是可選的,僅僅是一個語法 便利。然而,當一個變量與一個匿名 類型初始化必須,如果你需要在稍後訪問對象的 性聲明的變量VAR。
有這些
匿名類型之間的一些根本的區別:
他們有效地類類型與任何其他然後只讀屬性。沒有方法沒有事件。它們不能在本地範圍之外訪問/聲明。例如,如果在方法內部定義,則不能在該方法外訪問它們。
隱式類型的
我們可以用var
作爲隱式類型。這實際上意味着表達式右側的任何類型都將被編譯器分配給該var。這些不能爲空。
它們之間存在着一定的差異
隱式類型
我們可以知道哪些數據類型或類的類型分配給VAR
e.g.
var i = 10; /*here int datatype assigned*/
var A = new ArrayList(); /*here arraylist() class assigned*/
我們可以使用隱式類型也在另一個範圍內。
匿名類型
當我們不知道分配給VAR
e.g.
var a = new { Age = 12 , Name = X };
匿名變量用於可能僅在被宣佈範圍類的哪種類型。但不能在另一個範圍內使用,並且不能寫回方法的語句。
通常在Linq語句中使用匿名。
- 1. 與匿名類型
- 2. 與匿名類型
- 3. 無法隱式轉換類型「匿名類型#1 []」到「INT []」
- 4. C#無法隱式轉換類型「System.Linq.IQueryable <<匿名類型:
- 5. 不能隱式轉換類型 'system.linq.iqueryable匿名類型#1' 爲byte []
- 6. 匿名類型
- 7. 匿名類型
- 8. 匿名類型
- 9. 匿名類型
- 10. 列表與匿名類型
- 11. 匿名類型與Lambda表達式
- 12. 匿名類型和泛型
- 13. Deserialise匿名類型
- 14. 匿名類型C#
- 15. 從匿名類型
- 16. C#匿名類型
- 17. 匿名類型IQueryable
- 18. 匿名類型(類功能)
- 19. 以強類型返回匿名類型
- 20. LINQ中,VB - 匿名類型不能轉換爲匿名類型
- 21. 無法隱式轉換類型 'System.Collections.Generic.IEnumerable <匿名類型#1>' 到 'System.Array的[]'
- 22. 類型與Java泛型和匿名類不匹配
- 23. XML模式:將簡單類型轉換爲匿名類型
- 24. 轉換強類型的表達式匿名類型的返回
- 25. LINQ - 包含與匿名類型
- 26. 發送一個匿名類型與RenderPartial
- 27. 排序依據與匿名類型
- 28. C#7.0 ValueTuples與匿名類型
- 29. Moq驗證與匿名類型參數
- 30. 填寫DetailsView.DataSource與匿名類型
這裏有一個很好的解釋http://social.msdn.microsoft.com/Forums/vstudio/en-US/af2d0b6c-f1f3-4007-9f65-4418aa940c82/what-are-implicit-type-var-and-匿名類型 – christiandev