C# CacheHelper泛型

C# CacheHelper泛型,c#,C#,我遇到了一个对我来说有点棘手的问题。 我有一个通用的缓存帮助器类..s.. 我正在考虑在if语句之前删除强制转换,并在最后返回对象时强制转换…?如果您担心function.Invoke()之后obj变量可能为null,那么您可以测试并使用默认运算符 public static class CacheHelper<T> { public static T Get(string key, Func<T> function) { var obj = Ht


我遇到了一个对我来说有点棘手的问题。
我有一个通用的缓存帮助器类..s..

我正在考虑在if语句之前删除强制转换,并在最后返回对象时强制转换…?

如果您担心function.Invoke()之后obj变量可能为null,那么您可以测试并使用默认运算符

public static class CacheHelper<T>
{
    public static T Get(string key, Func<T> function) {
        var obj = HttpContext.Current.Cache[key]; // removed the cast
        if (obj == null)
        {
            obj = function.Invoke();

            if (obj == null)
            {
                return default(T);
            }

            HttpContext.Current.Cache.Add(key, obj, null, DateTime.Now.AddMinutes(3), TimeSpan.Zero, System.Web.Caching.CacheItemPriority.Normal, null);
        }

        return (T)obj; // now obj won't be null, but it might still be a different type
    }
}
公共静态类CacheHelper
{
公共静态T Get(字符串键,Func函数){
var obj=HttpContext.Current.Cache[key];//删除了强制转换
if(obj==null)
{
obj=function.Invoke();
if(obj==null)
{
返回默认值(T);
}
HttpContext.Current.Cache.Add(key,obj,null,DateTime.Now.AddMinutes(3),TimeSpan.Zero,System.Web.Caching.CacheItemPriority.Normal,null);
}
return(T)obj;//现在obj不会为null,但它可能仍然是另一种类型
}
}

我建议缓存null可能永远不会有用。即使要缓存的值为null,用非null的容器类包装它似乎更好。您的客户机如何区分“该项没有缓存数据”和“缓存数据为空”之间的区别?在查看日志或甚至单步执行代码时,您如何知道这一点?