使用委托/动作参数化逻辑

时间:2014-01-16 16:00:37

标签: c# delegates action

我有一堆类使用单个方法实现公共接口,该方法将对象作为输入。除了每个类处理对象的不同字段之外,每个类中的方法的行为是相同的。我希望简化代码。我可以使用Actions / delegates吗?有些人可以分享一些代码来说明如何处理这种情况吗?

这会给出我正在处理的代码的味道:

class A : interface1
{
    int f(List<someObject> x)
    {
         int result =0;
         foreach(var k in x)
         {result += k.field1 ;}
         return result;
    }

}

class B : interface1
{
    int f(List<someObject> x)
    {
         int result =0;
         foreach(var k in x)
         {result += k.field2;}
         return result;
    }

}

1 个答案:

答案 0 :(得分:1)

您可以添加参数来提取所需的字段:

int f(List<someObject> x, Func<SomeObject, int> selector)
{
    return x.Select(selector).Sum();
}

并称之为:

int field1Result = f(list, o => o.field1);
int field2Result = f(list, o => o.field2);