谷歌搜索后看起来并不乐观,但我想知道在C#中使用Action<T>
或Func<in T, out TResult>
时是否存在某种混叠或类型定义方式?
我已经看过Equivalent of typedef in c#,它表示在一个编译范围内,您可以在某些情况下使用using
构造,但这似乎不适用于Action
' s和Func
就我所知。
我想要这样做的原因是我希望将一个动作用作多个函数的参数,如果我在某个时间点决定改变动作,那么很多地方都要改变它们。参数类型和变量类型。
?typedef? MyAction Action<int, int>;
public static SomeFunc(WindowClass window, int number, MyAction callbackAction) {
...
SomeOtherFunc(callbackAction);
...
}
// In another file/class/...
private MyAction theCallback;
public static SomeOtherFunc(MyAction callbackAction) {
theCallback = callbackAction;
}
是否有一些构造要使用,可以定义代码段中指示的MyAction
?
答案 0 :(得分:6)
经过一些搜索后,好像delegate
来救援(见Creating delegates manually vs using Action/Func delegates和A:
Custom delegate types vs Func and Action)。请评论为什么这不是解决方案或可能存在的陷阱。
使用代理我可以重写给定代码示例的第一行:
public delegate void MyAction(int aNumber, int anotherNumber);
// Keep the rest of the code example
// To call one can still use anonymous actions/func/...
SomeFunc(myWindow, 109, (int a, int b) => Console.Writeline);
答案 1 :(得分:4)
using System;
namespace Example
{
using MyAction = Action<int>;
internal class Program
{
}
private void DoSomething(MyAction action)
{
}
}