在不知道对象实例的情况下传递Func

时间:2011-03-29 15:19:31

标签: linq c#-3.0 expression

我有一个Class Foo,它有许多返回DataSet的方法。我希望能够将Func<DataSet> process传递给一个方法,该方法可以在调用方法不知道的Foo实例上调用所请求的方法。像这样:

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是Foo的方法。

[注意:我不拥有Foo - 我无法对其进行更改。]

1 个答案:

答案 0 :(得分: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();