2010-04-14 44 views
5

在C#中,由於下面的代碼:C#轉換LINQ VAR結果實際類型

public class Person 
{ 
    public int PersonID { get; set; } 
    public int Age { get; set; } 
    public string Name { get; set; } 
} 

List<Person> people = new List<Person>(); 

    for (int i = 0; i != 15; i++) 
    { 
     Person p = new Person(); 
     p.PersonID = i; 
     p.Age = i * 12; 
     p.Name = "Name " + i; 
     people.Add(p); 
    } 


    var sortedPeople = from qPeople in people 
         where qPeople.Age > 0 && qPeople.Age < 25 || qPeople.Age > 100 
         orderby qPeople.Age descending 
         select qPeople; 

我可以加載sortedPeople的結果返回到一個列表<人>無循環?

謝謝。

+3

請使用for(int i = 0; i <15; i ++)'來代替'for(int i = 0; i!= 15; i ++)' - 一些有趣而神祕的無限循環可以如果在塊內修改了'i',則出現 – 2010-04-14 03:31:41

+0

如果您不明白var是編譯器推斷的類型聲明,那麼您不應該使用var。 – 2010-04-14 03:33:34

+1

@James Kolpack:無限循環至少很容易發現。如果你使用'i <15'並且發現這可能會更困難一點,那麼我猜想會出現一些神祕的意外行爲(重點是 - 修改塊內的「i」無論如何都是通向地獄的道路)。 – 2010-04-14 03:46:34

回答

10

是的。有一個.ToList()擴展方法可用,所以你需要做的就是像這樣調用它。

var sortedPeople = (from qPeople in people 
         where qPeople.Age > 0 && qPeople.Age < 25 || qPeople.Age > 100 
         orderby qPeople.Age descending 
         select qPeople).ToList(); 

現在sortedPeople將是一個List<Person>代替IOrderedEnumerable<Person>

2
var sortedPeople = (from qPeople in people 
         where qPeople.Age > 0 && qPeople.Age < 25 || qPeople.Age > 100 
         orderby qPeople.Age descending 
         select qPeople).ToList(); 
0
IEnumerable<Person> sortedPeople = from... 

固定!

另外:

List<Person> personList = sortedPeople.ToList(); 

注意,ToList方法遍歷結果產生這個名單。