作为参数传递时,在Func中调用方法

时间:2010-10-14 08:52:02

标签: reflection delegates c#-4.0

我正在创建一个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;
            }

        }

2 个答案:

答案 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并返回一个布尔值。