📅  最后修改于: 2023-12-03 15:06:48.467000             🧑  作者: Mango
在 C# 中,我们可以使用非泛型集合类来组织和操作元素对象的集合。例如,ArrayList
、Hashtable
、SortedList
等。这些类都实现了泛型集合类 List<T>
和 Dictionary<TKey, TValue>
等的接口,但是它们在运行时并不会执行类型检查。
本文将介绍如何使用 LINQ 语言集成查询技术(Language Integrated Query)在 C# 中打印非泛型集合列表。
我们可以定义 Person
类作为非泛型集合类的元素对象,并编写 PeopleCollection
类来管理 Person
对象的集合。
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public class PeopleCollection
{
private ArrayList people = new ArrayList();
public void AddPerson(Person p)
{
people.Add(p);
}
public IEnumerable<Person> GetPeople()
{
foreach (Person p in people)
yield return p;
}
}
注意,我们在 PeopleCollection
类中定义了一个 ArrayList
成员变量 people
来存储 Person
对象。AddPerson()
方法可以向集合中添加一个 Person
对象。GetPeople()
方法可以返回一个实现了 IEnumerable<Person>
接口的迭代器,我们可以使用该迭代器遍历集合中的所有 Person
对象。
在 C# 中,我们可以通过 LINQ 语句来查询集合中的元素,例如:
var result = from p in people
where p.Age >= 18
select p;
上述语句可以筛选出年龄大于等于 18 的 Person
对象,并将结果保存到 result
变量中。我们可以使用 foreach
循环遍历 result
变量中的元素,例如:
foreach (var p in result)
Console.WriteLine($"Name: {p.Name}, Age: {p.Age}");
完整的代码片段如下所示:
PeopleCollection collection = new PeopleCollection();
collection.AddPerson(new Person { Name = "Tom", Age = 20 });
collection.AddPerson(new Person { Name = "Jack", Age = 15 });
collection.AddPerson(new Person { Name = "Mary", Age = 25 });
var result = from p in collection.GetPeople()
where p.Age >= 18
select p;
foreach (var p in result)
Console.WriteLine($"Name: {p.Name}, Age: {p.Age}");
输出结果为:
Name: Tom, Age: 20
Name: Mary, Age: 25
其中,collection.GetPeople().Where(p => p.Age >= 18)
也是一个有效的查询语句,它使用了 lambda 表达式(p => p.Age >= 18
)来表示筛选条件。通过使用 LINQ,我们可以简洁地实现集合中元素的筛选、排序、分组等操作。
本文介绍了如何在 C# 中使用 LINQ 语言集成查询技术,使用 LINQ 可以帮助我们简化对集合的操作,例如筛选、排序、分组等。我们可以通过 LINQ 语句来查询非泛型集合中的元素,并使用迭代器来遍历结果集。