【问题标题】:C# dictionary store action/method [duplicate]C#字典存储动作/方法[重复]
【发布时间】:2017-10-18 10:33:31
【问题描述】:

我有一本带有 string 键的字典,例如123456789。现在在我的应用程序中的某个其他位置,我希望我的字典查找该键并运行方法本身(沿键存储)或以某种方式返回该函数,以便我可以手动添加参数。这甚至可能吗?

【问题讨论】:

  • 是的。为什么不可能?
  • 是的,其实很简单。您可以将值的类型设置为您想要的任何委托(例如ActionPredicate 等)。
  • 为什么不能禁用重力? @Cal279
  • 我想到了Action<>,但想知道这是否是开始这一点的正确点。
  • 是的,Action<> 可以存储在字典中。检索后,您可以像常规函数一样执行它,例如dict["123"](parameter)

标签: c# dictionary


【解决方案1】:

听起来很简单。 (不包括完整性检查)

Dictionary<string,Action<object>> dict;

public Action<object> GetFunction(string key)
{
    return dict[key];
}

public void CallFunction(string key, object parameter)
{
    dict[key](parameter);
}

【讨论】:

    【解决方案2】:

    您需要创建一个dictionary&lt;string, Action&gt;,这将是无参数的。

    例如

    static class MyActions {
      static Dictionary<string,Action> wibble = new Dictionary<string,Action>();
    }
    

    我使用的是静态的,如果您可以传递引用/检索引用,则没有必要。

    然后添加动作...

    MyActions.wibble["123456789"] = () => { // do action };
    

    或引用无参数方法

    MyActions.wibble["123456789"] = () => MyMethod;
    

    然后调用它;

    MyActions.wibble["123456789"]()
    

    假设key存在,可以使用try get甚至MyActions.wibble["123456789"]?.Invoke()

    如果需要参数,根据参数个数制作Action&lt;T&gt;Action&lt;T1, T2&gt;等类型的字典。

    例如wibble = new Dictionary&lt;string,Action&lt;int&gt;&gt;()

    然后wibble["123456789"] = x =&gt; {action with x}

    wibble["123456789"](42)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-23
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多