簡體   English   中英

LINQ:為什么此查詢不適用於ArrayList?

[英]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.

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