如何从内存缓存中返回通用列表

时间:2016-01-05 17:13:30

标签: c# generics casting

我有一个主要用于内存缓存的类。我有一个从缓存中读取的函数。如何返回通用列表,以便我可以根据类类型进行转换?

private ObjectCache cache = MemoryCache.Default; 
public List<T> GetCachedDataList<T>(string key)
{
    List<T> result = null;
    if (cache.Contains(key))
        result = cache[key] as List<T>;
    return result;
}

我想做这样的事情:

List<HelloClass> data = GetCachedDataList<HelloClass>("HelloString") as List<HelloClass>;

这是最好的方法吗?

1 个答案:

答案 0 :(得分:4)

你的方法已经返回了类型列表,然后yod不需要强制转换它。只需使用您的代码而不进行投射:

List<HelloClass> data = GetCachedDataList<HelloClass>("HelloString");

要使用更通用的解决方案,您可以实现下一个方法:

public T GetCachedData<T>(string key)
{
    try
    {
        if (cache.Contains(key))
            return (T) cache[key];
        return default(T);
    }
    catch(InvalidCastException ex)
    {
        // We can't return null because T can be value type
        // then returns default value for T. For classes it will be null.
        return default(T);
    }
}

现在您可以将此方法用于更多场景:

List<HelloClass> data = GetCachedData<List<HelloClass>>("HelloString");
HelloClass data = GetCachedData<HelloClass>("HelloStringSingleValue");