Predicate<T> 和 Func<T> 是 .NET 框架中定义的两个泛型委托类型,常用于 LINQ 查询和函数式编程。
Predicate<T>
接受一个参数并返回一个布尔值。List<T>.FindAll
或 Array.FindAll
中。Func<T, TResult>
接受一个或多个参数并返回一个结果。Where
, Select
等。using System;
using System.Collections.Generic;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public class Program
{
public static void Main()
{
List<Person> people = new List<Person>
{
new Person { Name = "Alice", Age = 30 },
new Person { Name = "Bob", Age = 25 },
new Person { Name = "Charlie", Age = 35 }
};
Predicate<Person> isAdult = p => p.Age >= 30;
List<Person> adults = people.FindAll(isAdult);
foreach (var person in adults)
{
Console.WriteLine($"{person.Name} is an adult.");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Func<int, bool> isEven = n => n % 2 == 0;
var evenNumbers = numbers.Where(isEven).ToList();
foreach (var number in evenNumbers)
{
Console.WriteLine($"{number} is even.");
}
}
}
原因: 如果过滤操作非常复杂或数据量很大,可能会导致性能下降。
解决方法:
Parallel LINQ
) 来并行化处理大数据集。var evenNumbersParallel = numbers.AsParallel().Where(isEven).ToList();
原因: 处理大量数据时可能会占用较多内存。
解决方法:
IEnumerable<T>
而不是立即加载所有数据到内存。通过这些方法,可以有效利用 Predicate<T>
和 Func<T>
进行高效的过滤操作,同时解决可能遇到的性能和内存问题。
领取专属 10元无门槛券
手把手带您无忧上云