Plain ArrayList Linq c#2语法(需要转换)

这个问题对我来说纯粹是学术性的,我在这里回答了一个问题。

从具有特定元素值的arraylist中检索对象

这家伙正在使用一个简单的ArrayList ……我知道不是最好的事情……充满了人

class Person { public string Name { get; set; } public string Gender { get; set; } public Person(string name, string gender) { Name = name; Gender = gender; } } personArrayList = new ArrayList(); personArrayList.Add(new Person("Koen", "Male")); personArrayList.Add(new Person("Sheafra", "Female")); 

现在他想选择所有女性。 我这样解决这个问题

 var females = from Person P in personArrayList where P.Gender == "Female" select P; 

另一个人建议

 var persons = personArrayList.AsQueryable(); var females = persons.Where(p => p.gender.Equals("Female")); 

但这似乎不起作用,因为编译器永远无法找到p的类型。

有谁知道我的查询的正确格式是第二种格式?

您可以使用Cast将其Cast转换为强类型枚举:

 var females = personArrayList.Cast() .Where(p => p.gender.Equals("Female")); 

如果你的arraylist中有Person以外的任何东西,则Cast会抛出exception。 您可以使用OfType而不是Cast来仅考虑Person类型的对象。

在旁注中,请使用enum来表示性别,而不是字符串。

 enum Sex { Male, Female } class Person { public Sex Gender { get; set; } } 

由于ArrayList具有无类型成员,因此您必须将成员PersonPerson

 var females = persons.OfType().Where(p => p.gender.Equals("Female")); 

personArrayList转换为其元素类型,您就完成了。

 var persons = personArrayList.Cast();