当我们编写C#代码时,经常会遇到Func<T>
和Action<T>
这两个委托类型。它们都是 C# 环境中的通用委托类型,用于定义具有特定签名的同步方法。虽然它们在某些方面看起来相似,但实际上它们之间有一些重要的区别。
Func与Action的区别
Func和Action的定义
- Func
:表示一个带有返回值的函数的委托。它可以在不使用自定义委托类型的情况下定义具有不同参数和返回类型的函数。 - Action
:表示一个不带返回值的方法的委托。它可以在不使用自定义委托类型的情况下定义具有不同参数但没有返回值的方法。
调用方式
在使用Func<T>
和Action<T>
时,它们的调用方式也有区别。下面是两个示例:
示例1:Func
using System;
class Program
{
static void Main(string[] args)
{
Func<int, int, int> add = (a, b) => a + b;
int result = add(1, 2);
Console.WriteLine(result); // 输出 3
}
}
在这个示例中,我们定义了一个add
函数,它的参数为int
类型,返回值也为int
类型。我们可以在初始化add
委托的过程中为它赋值,然后像普通的函数一样调用它。
示例2:Action
using System;
class Program
{
static void Main(string[] args)
{
Action<string> sayHello = name => Console.WriteLine($"Hello, {name}!");
sayHello("World"); // 输出 Hello, World!
}
}
在这个示例中,我们定义了一个sayHello
方法,它的参数为string
类型,没有返回值。我们可以在初始化sayHello
委托的过程中为它赋值,然后像普通的方法一样调用它。
参数列表和返回值
Func<T>
和Action<T>
的另一个区别是它们的参数列表和返回值。Func<T>
委托定义的方法将返回一个指定类型的结果,而Action<T>
委托定义的方法将不返回任何结果。这可以通过以下方式再次看到:
示例1:Func
using System;
class Program
{
static void Main(string[] args)
{
Func<int, int, int> add = (a, b) => a + b;
int result = add(1, 2);
Console.WriteLine(result); // 输出 3
}
}
在这个示例中,我们定义的add
方法需要两个int
类型的参数,它将它们相加并返回一个int
类型的结果。
示例2:Action
using System;
class Program
{
static void Main(string[] args)
{
Action<string> sayHello = name => Console.WriteLine($"Hello, {name}!");
sayHello("World"); // 输出 Hello, World!
}
}
在这个示例中,我们定义的sayHello
方法只有一个string
类型的参数,它不返回任何结果。
总结
尽管这两种委托看起来很相似,但它们在功能中有很大的区别。Func<T>
允许我们定义一个具有返回值的函数,而Action<T>
定义的方法没有返回值。因此,如果我们在编写需要返回值的方法时,应该使用Func<T>
,而在定义没有返回值的方法时,应该使用Action<T>
。
希望这篇文章能给您更好地了解Func<T>
和Action<T>
的不同之处。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Func