我有一堆类使用单个方法实现公共接口,该方法将对象作为输入。除了每个类处理对象的不同字段之外,每个类中的方法的行为是相同的。我希望简化代码。我可以使用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;
}
}
答案 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);