[英]LINQ: why does this query not work on an ArrayList?
public static ArrayList GetStudentAsArrayList()
{
ArrayList students = new ArrayList
{
new Student() { RollNumber = 1,Name ="Alex " , Section = 1 ,HostelNumber=1 },
new Student() { RollNumber = 2,Name ="Jonty " , Section = 2 ,HostelNumber=2 }
};
return students;
}
以下代碼無法編譯。 錯誤是ArrayList is not IEnumerable
ArrayList lstStudents = GetStudentAsArrayList();
var res = from r in lstStudents select r;
這樣編譯:
ArrayList lstStudents = GetStudentAsArrayList();
var res = from Student r in lstStudents select r;
誰能解釋這兩個摘要之間的區別? 為什么第二種有效?
由於ArrayList允許您收集不同類型的對象,因此編譯器不知道需要對哪種類型進行操作。
第二個查詢顯式強制轉換ArrayList中的每個對象以鍵入Student。
考慮使用List<>
而不是ArrayList。
在第二種情況下,您要告訴LINQ集合的類型是什么。 ArrayList
是弱類型的,因此為了在LINQ中有效使用它,可以使用Cast<T>
:
IEnumerable<Student> _set = lstStudents.Cast<Student>();
數組列表是無類型的,因此您必須定義所需的類型。 使用與泛型強類型化的List類。
List<Student> lstStudents = GetStudentAsArrayList();
var res = from r in lstStudents select r;
請注意,我為您的代碼段得到的錯誤是:
找不到源類型“ System.Collections.ArrayList”的查詢模式的實現。 找不到“選擇”。 考慮明確指定范圍變量“ r”的類型。
因此,我相信一種替代解決方案(幾乎絕對不是您更好的主意)是為ArrayList定義一個Select Extension方法。
我想不同的錯誤是由於包含了其他名稱空間。
ArrayList.Cast().Select()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.