gpt4 book ai didi

'all methods' 的 C# 委托(delegate)或 Func?

转载 作者:行者123 更新时间:2023-11-30 13:34:34 26 4
gpt4 key购买 nike

我读过一些有关 Func 和委托(delegate)的内容,它们可以帮助您将方法作为参数传递。现在我有一个缓存服务,它有这个声明:

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> methode) where T : class;

用法:

AddToCache<Person>(p, 10000, "Person", 
() => new PersonService().GetPersonById(1));

关于 'all methods' 的 C# 委托(delegate)或 Func?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2697022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com