2014-01-16 40 views
0

我有一堆類實現一個公共接口,只有一個方法將一個對象作爲輸入。該方法在每個類中的行爲是相同的,只是每個類處理對象的不同字段。我期待簡化代碼。我可以使用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

發表一些代表問題的示例代碼。 –

+0

沒有更多的細節,很難給出一個好的建議。看看戰略模式或行爲模式,看看是否符合您的需求。 – TTat

回答

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);