我有一个主要用于内存缓存的类。我有一个从缓存中读取的函数。如何返回通用列表,以便我可以根据类类型进行转换?
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>;
这是最好的方法吗?
答案 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");