C# List中FindAll用法的一些简单示例
在C#编程语言中,`List<T>` 是一个非常常用的集合类,它提供了许多方便的方法来操作和管理对象数组。本文将详细介绍 `List<T>` 中的 `FindAll` 方法的使用,并通过几个简单的示例进行解释。 `FindAll` 方法是 `List<T>` 类的一个成员,它接受一个谓词(Predicate)作为参数,返回一个新列表,其中包含满足该谓词条件的所有元素。谓词是一个返回布尔值的委托或lambda表达式,用于测试列表中的每个元素是否符合条件。 以下是一个简单的示例,展示了如何使用 `FindAll` 方法: ```csharp using System; using System.Collections.Generic; public partial class ListExample : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { CreateAndSearchList(); } private void CreateAndSearchList() { // 创建一个包含恐龙名称的List<string> List<string> dinosaurs = new List<string>(); dinosaurs.Add("Compsognathus"); dinosaurs.Add("Amargasaurus"); dinosaurs.Add("Oviraptor"); dinosaurs.Add("Velociraptor"); dinosaurs.Add("Deinonychus"); dinosaurs.Add("Dilophosaurus"); dinosaurs.Add("Gallimimus"); dinosaurs.Add("Triceratops"); // 输出原始列表 Console.WriteLine("Original List:"); foreach (string dinosaur in dinosaurs) { Console.Write(dinosaur + ", "); } // 使用匿名方法查找包含 "saurus" 的恐龙 List<string> saurus Dinosaurs = dinosaurs.FindAll(s => s.Contains("saurus")); Console.WriteLine("\nDinosaurs with 'saurus':"); foreach (string dinosaur in saurusDinosaurs) { Console.Write(dinosaur + ", "); } // 使用命名方法查找以 "saurus" 结尾的恐龙 Console.WriteLine("\nDinosaurs ending with 'saurus' using named method:"); List<string> endWithSaurus = dinosaurs.FindAll(EndsWithSaurus); foreach (string dinosaur in endWithSaurus) { Console.Write(dinosaur + ", "); } } // 定义一个命名方法来检查字符串是否以 "saurus" 结尾 private bool EndsWithSaurus(string dinosaur) { return dinosaur.Length > 5 && dinosaur.Substring(dinosaur.Length - 6).ToLower() == "saurus"; } } ``` 在这个示例中,我们首先创建了一个包含恐龙名称的 `List<string>`。然后,我们使用两种不同的方式来查找包含 "saurus" 的恐龙: 1. **匿名方法**:我们传递一个lambda表达式 `s => s.Contains("saurus")` 给 `FindAll` 方法。这个表达式会检查每个字符串是否包含 "saurus",如果包含,则返回 `true`,否则返回 `false`。 2. **命名方法**:我们定义了一个名为 `EndsWithSaurus` 的方法,该方法接受一个字符串参数,检查其是否以 "saurus" 结尾。然后我们将这个方法的名称传递给 `FindAll` 方法,达到同样的效果。 这两种方式都是等价的,它们都返回一个包含符合条件元素的新列表。`FindAll` 方法不会修改原始列表,而是返回一个新的列表,这使得原列表保持不变,符合数据结构的不可变性原则。 总结来说,`List<T>.FindAll` 方法是C#中处理列表数据时非常实用的功能,它可以轻松地筛选出满足特定条件的元素,无论是通过匿名方法还是命名方法,都能有效地实现过滤逻辑。在实际开发中,根据具体需求选择合适的方式,可以提高代码的可读性和灵活性。