如何声明一个包含委托的元组?
How do I declare a Tuple that holds Delegate?
我有一个场景,我的方法只能接受 1 个输入参数(Azure Durable Function Activity Trigger)。要解决此问题,如果我需要多个参数,我会将所有输入值填充到一个元组中,然后将 Tuple
传递给 activity 触发器 .
我正在尝试创建一个包含 3 个项目的元组
- 项目 1 =
Dictionary<string,string>
- 项目 2 =
Dictionary<string,string> MyFunction(T)
- 项目 3 =
T
简而言之
Item1
是一个 Dictionary<string,string>
Item2
是一个接受泛型对象 T
并输出 Dictionary<string,string>
的函数
Item3
是一个 泛型 对象 T
我希望能够使用 Item3
作为输入来执行 Item2
。
Item2
的执行会产生一个 Dictionary
,我将其与 Item1
.
组合
我遇到的问题是 delegate 的声明语法并不真正适合 Tuple
声明语法。
以下是我尝试使用委托键入 Tuple 的方式(它会抛出错误并且不起作用)
[FunctionName("MapOutputVariables")]
public Dictionary<string,string> MapOutputVariables<T>(
[ActivityTrigger] Tuple<Dictionary<string, string>, delegate Dictionary<string,string> map(T x), T> input,
ILogger log)
{ ... }
我将如何正确 在 Tuple
中声明委托?
有几种方法可以实现这一点。
public Dictionary<string,string> MapOutputVariables<T>(
(Dictionary<string, string> dict, Func<T,Dictionary<string,string>> callback, T somethingElse) input)
{
input.callback?.Invoke(input.somethingElse);
...
}
我用的是命名的ValueTuple
and Func<T,TResult> Delegate
,不过你可以更接近原来的
public delegate Dictionary<string,string> MyDelegate<T>(T source);
public Dictionary<string,string> MapOutputVariables<T>(
(Dictionary<string, string> dict, MyDelegate<T> callback, T somethingElse) input)
{
input.callback?.Invoke(input.somethingElse);
...
}
或
public delegate Dictionary<string,string> MyDelegate<T>(T source);
public Dictionary<string,string> MapOutputVariables<T>(
Tuple<Dictionary<string, string>, MyDelegate<T>,T> input)
{
input.Item2?.Invoke(input.Item3);
...
}
我有一个场景,我的方法只能接受 1 个输入参数(Azure Durable Function Activity Trigger)。要解决此问题,如果我需要多个参数,我会将所有输入值填充到一个元组中,然后将 Tuple
传递给 activity 触发器 .
我正在尝试创建一个包含 3 个项目的元组
- 项目 1 =
Dictionary<string,string>
- 项目 2 =
Dictionary<string,string> MyFunction(T)
- 项目 3 =
T
简而言之
Item1
是一个Dictionary<string,string>
Item2
是一个接受泛型对象T
并输出Dictionary<string,string>
的函数
Item3
是一个 泛型 对象T
我希望能够使用 Item3
作为输入来执行 Item2
。
Item2
的执行会产生一个 Dictionary
,我将其与 Item1
.
我遇到的问题是 delegate 的声明语法并不真正适合 Tuple
声明语法。
以下是我尝试使用委托键入 Tuple 的方式(它会抛出错误并且不起作用)
[FunctionName("MapOutputVariables")]
public Dictionary<string,string> MapOutputVariables<T>(
[ActivityTrigger] Tuple<Dictionary<string, string>, delegate Dictionary<string,string> map(T x), T> input,
ILogger log)
{ ... }
我将如何正确 在 Tuple
中声明委托?
有几种方法可以实现这一点。
public Dictionary<string,string> MapOutputVariables<T>(
(Dictionary<string, string> dict, Func<T,Dictionary<string,string>> callback, T somethingElse) input)
{
input.callback?.Invoke(input.somethingElse);
...
}
我用的是命名的ValueTuple
and Func<T,TResult> Delegate
,不过你可以更接近原来的
public delegate Dictionary<string,string> MyDelegate<T>(T source);
public Dictionary<string,string> MapOutputVariables<T>(
(Dictionary<string, string> dict, MyDelegate<T> callback, T somethingElse) input)
{
input.callback?.Invoke(input.somethingElse);
...
}
或
public delegate Dictionary<string,string> MyDelegate<T>(T source);
public Dictionary<string,string> MapOutputVariables<T>(
Tuple<Dictionary<string, string>, MyDelegate<T>,T> input)
{
input.Item2?.Invoke(input.Item3);
...
}