1.简单介绍Fun
C#中Fun和Action有点类似,都是一个委托方法,不同的是Func是有返回值的,而Action没有。
(T)此委托封装的方法的参数类型。
备注:详情了解Fun到(https://www.cnblogs.com/LipeiNet/p/4694225.html)
2.简单例子介绍
这面全局定义了一个字典,封装一个方法定义两个参数为string类型,一个委托。假设调用方法传入一个key,如果存在字典返回一个Value,如果不存则通过委托返回key!
这里贴出图片,简易介绍代码执行流程
3.结合缓存封装使用
1).获取数据
/// <summary> /// 获取数据 /// </summary> public void GetConfigsValue() { var key = "SysKeyInfo"; var keyDic = GetDataLocalCache<string>(key, () => { using (EntityContext db = new EntityContext()) { var value = db.Configs.FirstOrDefault(o => o.Name == "SysKeyInfo").Value; return value; } }, DateTime.Now.AddHours(2)); }
2).获取缓存
/// <summary> /// 获取缓存数据 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key">缓存key</param> /// <param name="callBack">委托方法名</param> /// <param name="timeout">缓存过期时间</param> /// <returns></returns> public static T GetDataLocalCache<T>(string key, Func<T> callBack, DateTime? timeout = null) { if (!timeout.HasValue) timeout = DateTime.Now.AddMinutes(5); var cache = HttpRuntime.Cache[key]; //如果缓存不存在或者过期则执行委托方法 if (cache == null) { var result = callBack(); if (result != null) //将委托方法执行结果存入缓存中 HttpRuntime.Cache.Insert(key, result, null, timeout.GetValueOrDefault(), System.Web.Caching.Cache.NoSlidingExpiration); return result; } else { return (T)cache; } }
4.总结
从Func的委托中,我们可以看出,它简化了我们自己定义委托带来的繁琐,同时它更好的结合了Lamdba的使用。减少了自定义函数的作用。同时也是有缺点的,就是错误的出现不容易发现是那里。Action委托的使用与Func雷同,这里就不在说了。希望自己的总结可以对大家有所帮助。
打个广告: 晨风电影 https://www.chenfengdy.top/