📜  使用 LINQ 打印非泛型集合列表的 C# 程序(1)

📅  最后修改于: 2023-12-03 15:06:48.467000             🧑  作者: Mango

使用 LINQ 打印非泛型集合列表的 C# 程序

在 C# 中,我们可以使用非泛型集合类来组织和操作元素对象的集合。例如,ArrayListHashtableSortedList 等。这些类都实现了泛型集合类 List<T>Dictionary<TKey, TValue> 等的接口,但是它们在运行时并不会执行类型检查。

本文将介绍如何使用 LINQ 语言集成查询技术(Language Integrated Query)在 C# 中打印非泛型集合列表。

1. 编写非泛型集合类

我们可以定义 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 对象。

2. 使用 LINQ 打印非泛型集合列表

在 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,我们可以简洁地实现集合中元素的筛选、排序、分组等操作。

3. 总结

本文介绍了如何在 C# 中使用 LINQ 语言集成查询技术,使用 LINQ 可以帮助我们简化对集合的操作,例如筛选、排序、分组等。我们可以通过 LINQ 语句来查询非泛型集合中的元素,并使用迭代器来遍历结果集。