C#编程中,Action
和 Func
都是预定义的泛型委托类型,两者的核心区别在于是否具有返回值。
Action
Action
表示一个无返回值的方法,并且可以接受任意数量和类型的参数(从0到16个)。- 使用场景:只需要执行一段代码而不需要关心其返回值时,例如用于事件处理器、回调方法、一次性任务等。
- 示例:
-
public delegate void Action(); public delegate void Action<T1>(T1 arg1); public delegate void Action<T1, T2>(T1 arg1, T2 arg2); // 使用Action的例子 Action sayHello = () => Console.WriteLine("Hello, 鸡哥!"); sayHello(); // 输出 "Hello, 鸡哥!" //两种写法都彳亍 Action<int> printNumber = new Action<int>((number) => Console.WriteLine($"输出数字为: {number}")); printNumber(114514); // 输出 "输出数字为: 114514"
Func
Func
表示一个有返回值的方法,并且同样可以接受任意数量和类型的参数(从0到17个),最后一个类型参数表示返回值类型。- 使用场景:需要封装一个带有返回值的计算、查询或其他操作时,比如作为Lambda表达式传递给LINQ查询或者其他需要返回特定类型结果的场合。
- 示例
public delegate TResult Func<TResult>(); public delegate TResult Func<T1, TResult>(T1 arg1); public delegate TResult Func<T1, T2, TResult>(T1 arg1, T2 arg2); // 使用Func的例子 Func<int> addOne = () => 1 + 1; int result = addOne(); // 结果存储在变量result中,值为2 //两种写法都彳亍 Func<int, int, int> addNumbers = new Func<int, int, int>((a, b) => a + b); //Func的第一个int表示返回值类型,第二个和第三个int表示入参的类型 int sum = addNumbers(3, 5); // 结果存储在sum中,值为8
总结:
-
如果需要定义或传递一个不返回任何值的方法,选择
Action
委托类型;如果需要一个返回特定类型值的方法,则可以选Func
委托类型。