2009-10-11 31 views
8

Làm cách nào để truyền/chuyển đổi loại biến đổi thành loại Danh sách?C# - var vào Danh sách <T> chuyển đổi

Đoạn mã này được đem lại cho tôi lỗi:

List<Student> studentCollection = Student.Get(); 

var selected = from s in studentCollection 
          select s; 

List<Student> selectedCollection = (List<Student>)selected; 
foreach (Student s in selectedCollection) 
{ 
    s.Show(); 
} 
+2

'var' không phải là một loại, nó chỉ là một trình giữ chỗ cho loại biểu thức bất kỳ mà bạn đang gán cho biến. Trong trường hợp này, biểu thức truy vấn sẽ đánh giá thành một 'IEnumerable '. – Joren

Trả lời

19

Khi bạn làm như LINQ to Objects truy vấn, nó sẽ trở lại cho bạn những loại IEnumerable<Student> , bạn có thể sử dụng phương pháp ToList() để tạo một List<T> từ một số IEnumerable<T>:

var selected = from s in studentCollection 
          select s; 

List<Student> selectedCollection = selected.ToList(); 
+1

Câu trả lời này có một lời giải thích tốt hơn của riêng tôi. Điều này nên được chấp nhận. –

+0

@CMS chào bạn của tôi. Tôi đã thử giải pháp này trong vấn đề không hài lòng của dự án. Nó không hiệu quả với tôi. Bạn có thể giúp tôi cho câu hỏi này không ?: http://stackoverflow.com/questions/32839483/how-can-change-list-type – CoderWho

3

Bạn có thể gọi phần mở rộng ToList LINQ Phương pháp

List<Student> selectedCollection = selected.ToList<Student>(); 
foreach (Student s in selectedCollection) 
{ 
    s.Show(); 
} 
1

Hãy thử như sau

List<Student> selectedCollection = selected.ToList(); 
8

Các var trong mã mẫu của bạn là thực sự gõ như IEnumerable<Student>. Nếu tất cả các bạn đang làm là liệt kê nó, không có cần phải chuyển nó sang một danh sách:

var selected = from s in studentCollection select s; 

foreach (Student s in selected) 
{ 
    s.Show(); 
} 

Nếu bạn cần nó như là một danh sách, ToList() phương pháp từ LINQ sẽ chuyển nó sang một cho bạn .

Các vấn đề liên quan