![](/img/trans.png)
[英]Why does the C# compiler allow a cast to be performed with Linq but not with parentheses?
[英]Why does C# not allow anonymous cast to objects?
我想知道不允許這種轉換的原因。 SO的這篇文章中已經談到了這個主題,但是我想對為什么這在本機上不可能做一個低級的解釋。
為什么這些強制轉換失敗?
OBS:我知道可以通過反思來做到這一點。
IList<People> peopleList = new List<People>()
{
new People() { Name = "Again", Age = 10 },
new People() { Name = "Over", Age = 20 },
new People() { Name = "Jonh", Age = 30 },
new People() { Name = "Enzo", Age = 40 },
};
var anonymous = (from p in peopleList
select new
{
Name = p.Name,
Age = p.Age
});
// Does not work
IList<People> listt = (IList<People>)anonymous;
//Does not Work
IList<People> listt = (anonymous as List<People>);
問題是為什么不能將anonymous
成功轉換為IList<People>
或List<People>
。
anonymous
實現IEnumerable<T>
,而不是IList<T>
並且肯定不是子類List<T>
。 因此,不能將其IList<T>
為任何IList<T>
或List<T>
類型。 如果那是您想要的,則使用ToList()
執行查詢並將結果集存儲在列表中。 IEnumerable<People>
嗎? 否。它是一系列匿名類型的對象,已復制與People
相關聯的某些值。 因此,這是一系列匿名對象,而不是一系列人。 我還注意到,在新的C#7代碼中,如果可以在應用程序中使用元組而不是匿名類型,則是更好的做法。 它們在類型系統中具有更好的支持,並產生較小的收集壓力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.