如何声明一个包含委托的元组?

How do I declare a Tuple that holds Delegate?

我有一个场景,我的方法只能接受 1 个输入参数(Azure Durable Function Activity Trigger)。要解决此问题,如果我需要多个参数,我会将所有输入值填充到一个元组中,然后将 Tuple 传递给 activity 触发器 .

我正在尝试创建一个包含 3 个项目的元组

  1. 项目 1 = Dictionary<string,string>
  2. 项目 2 = Dictionary<string,string> MyFunction(T)
  3. 项目 3 = 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);
    ...
}