C# Func 委托
介绍
在 C# 中,委托(Delegate)是一种类型安全的函数指针,允许你将方法作为参数传递或存储。Func
委托是 C# 中预定义的一种泛型委托,它可以表示带有返回值的方法。Func
委托的最后一个泛型参数表示返回值类型,而前面的参数表示方法的输入参数。
Func
委托的签名如下:
csharp
public delegate TResult Func<in T1, in T2, ..., out TResult>(T1 arg1, T2 arg2, ...);
其中,T1
, T2
, ... 是输入参数的类型,TResult
是返回值的类型。
基本用法
1. 无参数的 Func 委托
最简单的 Func
委托是没有输入参数,只有返回值的委托。例如:
csharp
Func<int> getRandomNumber = () => new Random().Next(1, 100);
int number = getRandomNumber();
Console.WriteLine(number); // 输出:1 到 100 之间的随机数
在这个例子中,getRandomNumber
是一个没有输入参数并返回 int
类型的 Func
委托。
2. 带参数的 Func 委托
Func
委托也可以接受多个输入参数。例如:
csharp
Func<int, int, int> add = (a, b) => a + b;
int result = add(3, 5);
Console.WriteLine(result); // 输出:8
在这个例子中,add
是一个接受两个 int
类型参数并返回 int
类型的 Func
委托。
实际应用场景
1. 作为方法参数
Func
委托常用于将方法作为参数传递给其他方法。例如,假设我们有一个方法 ProcessNumbers
,它接受一个 Func<int, int>
委托作为参数:
csharp
void ProcessNumbers(int[] numbers, Func<int, int> operation)
{
for (int i = 0; i < numbers.Length; i++)
{
numbers[i] = operation(numbers[i]);
}
}
int[] numbers = { 1, 2, 3, 4, 5 };
ProcessNumbers(numbers, x => x * 2);
Console.WriteLine(string.Join(", ", numbers)); // 输出:2, 4, 6, 8, 10
在这个例子中,ProcessNumbers
方法接受一个 Func<int, int>
委托,并将其应用于数组中的每个元素。
2. 在 LINQ 中使用
Func
委托在 LINQ 查询中也非常常见。例如:
csharp
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n => n % 2 == 0).ToList();
Console.WriteLine(string.Join(", ", evenNumbers)); // 输出:2, 4
在这个例子中,Where
方法接受一个 Func<int, bool>
委托,用于过滤列表中的元素。
总结
Func
委托是 C# 中非常强大的工具,它允许你将方法作为参数传递,从而实现更灵活的编程模式。通过使用 Func
委托,你可以简化代码并提高代码的可重用性。
提示
小提示:Func
委托最多可以接受 16 个输入参数。如果需要更多的参数,可以考虑使用自定义委托或重构代码。
附加资源与练习
- 练习:尝试创建一个
Func
委托,接受两个字符串作为输入参数,并返回它们的连接结果。 - 进一步学习:了解
Action
委托,它与Func
委托类似,但没有返回值。
通过掌握 Func
委托,你将能够编写更加灵活和强大的 C# 代码。继续练习并探索更多高级用法吧!