【问题标题】:How do I declare a Tuple that holds Delegate?如何声明一个包含委托的元组?
【发布时间】:2020-11-25 23:57:02
【问题描述】:

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

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

  1. 项目1 = Dictionary<string,string>
  2. 项目2 = Dictionary<string,string> MyFunction(T)
  3. 项目 3 = T

简而言之。

  • Item1Dictionary<string,string>
  • Item2 是一个接受泛型对象T 并输出Dictionary<string,string> 的函数
  • Item3 是一个通用类型 对象T

我希望能够使用Item3 作为输入来执行Item2

Item2 的执行将产生一个Dictionary,我将与Item1 合并。

我遇到的问题是 delegate 的声明语法并不真正适合 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 中声明委托?

【问题讨论】:

    标签: c# generics delegates tuples azure-durable-functions


    【解决方案1】:

    有几种方法可以实现这一点。

    public Dictionary<string,string> MapOutputVariables<T>(
        (Dictionary<string, string> dict, Func<T,Dictionary<string,string>> callback, T somethingElse) input)
    {
        input.callback?.Invoke(input.somethingElse);
        ...
    }
    

    我使用了一个名为 ValueTupleFunc&lt;T,TResult&gt; 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);
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-19
      • 2013-12-17
      • 1970-01-01
      相关资源
      最近更新 更多