2011-03-29 105 views
1

我有一個帶有許多返回DataSet的方法的Foo類。我希望能夠將Func<DataSet> process傳遞給一個方法,該方法可以調用調用方法不知道的Foo實例上的請求方法。事情是這樣的:在不知道對象實例的情況下傳遞Func

DataSet CommonMethod(Func<DataSet> process) 
{ 
    Foo foo = GetFooFromSomewhere(); 
    return foo.process(); // <-- obviously, not this way! 
} 

稱爲喜歡的東西

DataSet ds1 = CommonMethod(GetDataSetForX); 
DataSet ds2 = CommonMethod(GetDataSetForY); 

其中GetDataSetForX/Y是富的方法。

[注:我沒有自己美孚 - 我不能進行更改。]

回答

4

做這樣的:

DataSet CommonMethod(Func<Foo, DataSet> process) 
{ 
    Foo foo = GetFooFromSomewhere(); 
    return process(foo); 
} 

// call it like this: 
DataSet ds1 = CommonMethod(f => f.GetDataSetForX()); 
DataSet ds2 = CommonMethod(f => f.GetDataSetForY()); 

但說實話,在簡單的例子,我不沒有看到好處。爲什麼不把它做成「老式的方式」?

DataSet ds1 = GetFooFromSomewhere().GetDataSetForX(); 
DataSet ds2 = GetFooFromSomewhere().GetDataSetForY(); 
+0

謝謝。好處是因爲這個例子被簡化了。 CommonMethod實際上有很多代碼,我會重複,無論是在檢索DataSet之前和之後。 – 2011-03-29 16:06:28

相關問題