我正在创建一个Func作为另一个方法的参数输入,但是我该如何调用它?
以下代码描述了我的工作:
我打电话给Foo:
Foo(x => x.SlidingExpiration(TimeSpan.FromSeconds(50)));
我的方法Foo:
public void Foo(Func<CacheExpiration, TimeSpan> cacheExpiration)
{
....
inside here I want to call RefreshCache, but how?.. cacheExpiration.??
}
CacheExpiration:)
public class CacheExpiration
{
TimeSpan timeSpan;
bool sliding;
public TimeSpan SlidingExpiration(TimeSpan ts)
{
this.timeSpan = ts;
this.sliding = true;
return ts;
}
public TimeSpan AbsoluteExpiration(TimeSpan ts)
{
this.timeSpan = ts;
return ts;
}
public bool RefreshCache(MetaObject mo)
{
//some logic....
return true;
}
}
答案 0 :(得分:1)
var ts = cacheExpiration(yourCacheExpiration);
答案 1 :(得分:0)
如果我正确读取此内容,则Func cacheExpiration将获取一个CacheExpiration实例并返回TimeSpan。所以我可以看到Foo的身体:
TimeSpan ts = cacheExpiration.SlidingExpiration(TimeSpan.FromSeconds(50));
//or
TimeSpan ts2 = cacheExpiration.AbsoluteExpiration(TimeSpan.FromSeconds(50));
这与你的例子中的lamda不符,所以我猜你真的希望cacheExpiration是一个Func,它接受Timespan并返回TimeSpan。但这不适用于RefreshCache方法,因为它需要一个MetaObject并返回一个布尔值。