Plain ArrayList Linq c# 2 语法(需要转换)
本文关键字:转换 语法 ArrayList Linq Plain | 更新日期: 2023-09-27 18:36:01
这个问题对我来说纯粹是学术性的,是我在这里回答的一个问题的衍生品。
从具有特定元素值的数组列表中检索对象
这家伙正在使用一个普通的数组列表...我不知道最好的办法...挤满了人
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<T>
将其强制转换为强类型枚举:
var females = personArrayList.Cast<Person>()
.Where(p => p.gender.Equals("Female"));
如果您的数组列表中有除Person
以外的任何内容,Cast<T>
会抛出异常。您可以使用 OfType<T>
而不是 Cast<T>
来仅考虑那些类型 Person
的对象。
附带说明一下,请使用枚举表示性别,而不是字符串。
enum Sex { Male, Female }
class Person
{
public Sex Gender { get; set; }
}
由于ArrayList
具有非类型化成员,因此您必须将成员转换为Person
:
var females = persons.OfType<Person>().Where(p => p.gender.Equals("Female"));
将personArrayList
转换为其元素类型,您就完成了。
var persons = personArrayList.Cast<Person>();