Reflection 作为参数传递时调用Func中的方法

Reflection 作为参数传递时调用Func中的方法,reflection,delegates,c#-4.0,Reflection,Delegates,C# 4.0,我创建了一个Func作为另一个方法的参数输入,但是我如何调用它呢 以下代码描述了我的工作: 我给Foo打电话时说: Foo(x => x.SlidingExpiration(TimeSpan.FromSeconds(50))); 我的方法是: public void Foo(Func<CacheExpiration, TimeSpan> cacheExpiration) { .... inside here I want to call RefreshCache, but h

我创建了一个Func作为另一个方法的参数输入,但是我如何调用它呢

以下代码描述了我的工作:

我给Foo打电话时说:

Foo(x => x.SlidingExpiration(TimeSpan.FromSeconds(50)));
我的方法是:

public void Foo(Func<CacheExpiration, TimeSpan> cacheExpiration)
{
....
inside here I want to call RefreshCache, but how?.. cacheExpiration.??

}

如果我读得正确,那么Func cacheExpiration将获取一个cacheExpiration实例并返回一个TimeSpan。所以我可以看到傅的身体是:

TimeSpan ts = cacheExpiration.SlidingExpiration(TimeSpan.FromSeconds(50));
//or
TimeSpan ts2 = cacheExpiration.AbsoluteExpiration(TimeSpan.FromSeconds(50));

这和您的示例中的lamda不一致,所以我猜测您确实希望cacheExpiration是一个接受Timespan并返回Timespan的Func。但这对RefreshCache方法不起作用,因为它接受一个元对象并返回一个布尔值。

这个问题没有完全意义。函数
Foo
的参数是一个委托,它可以根据需要将
CacheExpiration
实例转换为
Timespan
Foo
方法没有要传递给委托的现有
CacheExpiration
实例的引用。您希望调用哪个
RefreshCache
对象?委托参数在这方面有什么帮助?它甚至不返回一个
CacheExpiration
object..NServiceBus可以像这样配置:NServiceBus.Configure.With().Log4Net(a=>a.YourProperty=“value”);为什么我不能做类似的事情?Foo(x=>x.SlidingExpiration(TimeSpan.FromSeconds(50));在VisualStudio中,通过转到.Log4Net方法的定义,您可以从NServiceBus获得该方法的签名。看起来他们正在传递一个函数来配置泛型类型。
var ts = cacheExpiration(yourCacheExpiration);
TimeSpan ts = cacheExpiration.SlidingExpiration(TimeSpan.FromSeconds(50));
//or
TimeSpan ts2 = cacheExpiration.AbsoluteExpiration(TimeSpan.FromSeconds(50));