C#过滤器列表教程展示了如何在C#中过滤列表。C#教程是C#语言的综合教程。
本教程展示了几种用C#语言过滤列表的方法。我们使用迭代、LINQ和内置的FindAll
方法。
带迭代的C#过滤器列表
在第一个示例中,我们使用foreach
循环来过滤列表。
var words = new List<string> { "sky", "rock", "forest", "new", "falcon", "jewelry" }; var filtered = new List<string>(); foreach (var word in words) { if (word.Length == 3) { filtered.Add(word); } } Console.WriteLine(string.Join(',', filtered));
该示例过滤掉所有包含三个字符的单词。
var words = new List<string> { "sky", "rock", "forest", "new", "falcon", "jewelry" };
我们有一个单词列表。目标是找出所有三个字母的单词。
var filtered = new List<string>();
一个新的filtered
列表被创建。所有符合条件的词都会被添加到列表中。
foreach (var word in words) { if (word.Length == 3) { filtered.Add(word); } }
我们在foreach
循环中遍历单词列表。所有匹配if条件的词都被添加到filtered
列表中。
Console.WriteLine(string.Join(',', filtered));
我们将filtered
列表的内容显示到控制台。
$ dotnet run sky,new
使用FindAll的C#过滤器列表
在下面的示例中,我们使用内置的FindAll
方法过滤列表。
var vals = new List<int> {-1, -3, 0, 1, 3, 2, 9, -4}; List<int> filtered = vals.FindAll(e => e > 0); Console.WriteLine(string.Join(',', filtered));
该示例找出所有大于零的整数值。
List<int> filtered = vals.FindAll(e => e > 0);
FindAll
方法检索与指定谓词定义的条件匹配的所有元素。
$ dotnet run 1,3,2,9
带有LINQ查询表达式的C#过滤器列表
以下示例使用LINQ查询表达式来筛选列表。
var words = new List<string> { "sky", "rock", "forest", "new", "falcon", "jewelry" }; var query = from word in words where word.Length == 3 select word; foreach (var word in query) { Console.WriteLine(word); }
该示例选择所有包含三个字符的单词。
使用LINQWhere的C#过滤器列表
下一个示例使用LINQ的Where
方法过滤列表。
var vals = new List<int> {-1, -3, 0, 1, 3, 2, 9, -4}; List<int> filtered = vals.Where(x => x > 0).ToList(); Console.WriteLine(string.Join(',', filtered));
该示例过滤掉所有正值。
List<int> filtered = vals.Where(x => x > 0).ToList();
Where
方法根据谓词过滤一系列值。
C#过滤对象列表
在下面的示例中,我们使用LINQ查询表达式筛选汽车对象列表。
var cars = new List<Car> { new ("Audi", 52642), new ("Mercedes", 57127), new ("Skoda", 9000), new ("Volvo", 29000), new ("Bentley", 350000), new ("Citroen", 21000), new ("Hummer", 41400), new ("Volkswagen", 21601) }; foreach (var car in from car in cars where car.Price > 9000 && car.Price < 50000 select new { car.Name, car.Price }) { Console.WriteLine($"{car.Name} {car.Price}"); } record Car(string Name, int Price);
该示例选择了价格在9000到50000之间的所有汽车。
$ dotnet run Volvo 29000 Citroen 21000 Hummer 41400 Volkswagen 21600
C#使用Func过滤数组
在示例中,我们使用Func
委托来过滤一组用户。
User[] users = { new (1, "John", "London", "2001-04-01"), new (2, "Lenny", "New York", "1997-12-11"), new (3, "Andrew", "Boston", "1987-02-22"), new (4, "Peter", "Prague", "1936-03-24"), new (5, "Anna", "Bratislava", "1973-11-18"), new (6, "Albert", "Bratislava", "1940-12-11"), new (7, "Adam", "Trnava", "1983-12-01"), new (8, "Robert", "Bratislava", "1935-05-15"), new (9, "Robert", "Prague", "1998-03-14"), }; var city = "Bratislava"; Func<User, bool> livesIn = e => e.City == city; var res = users.Where(livesIn); foreach (var e in res) { Console.WriteLine(e); } record User(int id, string Name, string City, string DateOfBirth);
从用户数组中,我们找到了居住在布拉迪斯拉发的用户。
var city = "Bratislava"; Func<User, bool> livesIn = e => e.City == city;
在谓词中,一个返回布尔值的函数,我们测试所有City
属性等于city
变量的用户对象。
var res = users.Where(livesIn);
我们将livesIn
谓词传递给Where
方法。
$ dotnet run User { id = 5, Name = Anna, City = Bratislava, DateOfBirth = 1973-11-18 } User { id = 6, Name = Albert, City = Bratislava, DateOfBirth = 1940-12-11 } User { id = 8, Name = Robert, City = Bratislava, DateOfBirth = 1935-05-15 }
在本文中,我们展示了如何在C#中过滤列表。
列出所有C#教程。