“所有方法”的C#委托或Func?
问题描述:
我已阅读了关于Func和代表的一些信息,他们可以帮助您将方法作为参数传递。 现在我有一个cachingservice,它有这样的声明:“所有方法”的C#委托或Func?
public static void AddToCache<T>(T model, double millisecs, string cacheId) where T : class
public static T GetFromCache<T>(string cacheId) where T : class
在我想缓存一些数据的地方
所以,我检查它是否在缓存中(与GetFromCache)存在,如果没有,得到来自某处的数据,并将其添加到缓存中(使用AddToCache)
现在我想用一个参数来扩展AddToCache方法,该参数是调用以获取数据的类+方法 然后,声明就像此
public static void AddToCache<T>(T model, double millisecs, string cacheId, Func/Delegate methode) where T : class
然后这个方法可以检查缓存是否有数据,如果没有,通过它提供的方法获取数据本身。
然后调用代码我可以说:
AddToCache<Person>(p, 10000, "Person", new PersonService().GetPersonById(1));
AddToCache<Advert>(a, 100000, "Advert", new AdvertService().GetAdverts(3));
什么我想要实现的是,“如果缓存为空获取数据并添加缓存”逻辑放在只有一个地方。
我希望这是有道理的:)
哦,顺便说一下,问题是:这可能吗?
答
像这样:
public static void AddToCache<T>(T model, double millisecs, string cacheId, Func<T> getValueFunction) where T : class
{
// if miss:
var person = getValueFunction.Invoke();
}
的通话将如下所示:
AddToCache(p , 1, "Person",() => new PersonService().GetPersonById(1));
答
你可能想:
public static void AddToCache<T>(T model, double millisecs, string cacheId,
Func<T> methode) where T : class;
用法:
AddToCache<Person>(p, 10000, "Person",
() => new PersonService().GetPersonById(1));
+1
问题标题的答案是'Delegate'类表示任何函数或委托,但是,这可能是他们想要的。 +1 – 2010-04-23 08:04:35
是的,作品!非常感谢.... – Michel 2010-04-23 11:23:57