相当于 C# 中 Action<> and/or Func<> 的 typedef
Equivalent of typedef in c# for Action<> and/or Func<>
谷歌搜索后看起来不太乐观,但我想知道在 C# 中使用 Action<T>
或 Func<in T, out TResult>
时是否有某种别名或类型定义的方法?
我已经看过 Equivalent of typedef in c#,它说在一个编译范围内您可以在某些情况下使用 using
构造,但这似乎不适用于 Action
和 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
?
经过更多搜索后,似乎 delegate
来拯救(参见 Creating delegates manually vs using Action/Func delegates 和 A:
自定义委托类型与 Func 和 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);
using System;
namespace Example
{
using MyAction = Action<int>;
internal class Program
{
}
private void DoSomething(MyAction action)
{
}
}
谷歌搜索后看起来不太乐观,但我想知道在 C# 中使用 Action<T>
或 Func<in T, out TResult>
时是否有某种别名或类型定义的方法?
我已经看过 Equivalent of typedef in c#,它说在一个编译范围内您可以在某些情况下使用 using
构造,但这似乎不适用于 Action
和 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
?
经过更多搜索后,似乎 delegate
来拯救(参见 Creating delegates manually vs using Action/Func delegates 和 A:
自定义委托类型与 Func 和 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);
using System;
namespace Example
{
using MyAction = Action<int>;
internal class Program
{
}
private void DoSomething(MyAction action)
{
}
}