将参数传递给行动

时间:2014-09-16 13:10:11

标签: c# .net c#-4.0 dependency-injection

不确定如何正确命名问题,所以这就是我想要实现的目标。我有一个通用的迭代器方法,它以递归的方式遍历对象的属性

internal static void IterateProperties(Object element, Action<Object> action)
{
  // recursively iterate over objects properties recursively
  // ...
  action.Invoke(element);
}

然后我有一个可以传递给该方法的方法。

private static void ResetSomeProperty(Object element)
{
  // do something with the element
}

然后在某个时候调用它。

IterateProperties(element, ResetSomeProperty);

到目前为止一切顺利。现在我想将一些其他依赖项传递给ResetSomeProperty方法:

//Pseudocode
IterateProperties(element, ResetSomeProperty(externalDictionary));

    private static void ResetSomeProperty(
      Object element, 
      [externalProperty] Dictionary<int, int> dictionary)
    {
      // do something with the element
    }

我希望你得到我需要的东西。我想不出一个允许我的设计(除了去提供该信息的外部静态类)

2 个答案:

答案 0 :(得分:0)

我认为您需要将IterateProperties中的Action<object>参数更改为Action<object,Dictionary<int,int>>。这样,你就会有这样的事情:

internal static void IterateProperties(Object element, Dictionary<int,int> dict, Action<Object, Dictionary<int,int>> action)
{
  // recursively iterate over objects properties recursively
  // ...
  action.Invoke(element, dict);
}

对IterateProperties的方法调用将是:

IterateProperties(element, externalDictionary, ResetSomeProperty);

答案 1 :(得分:0)

使用lambda来关闭相关词典:

IterateProperties(element, ele => ResetSomeProperty(ele, externalDictionary));