我正在尝试在.NET Core应用程序中使用Azure Redis Cache。我编写了一个CacheHelper通用方法,该方法实现了以下通用接口。
但是这个问题与泛型更相关。
当我将缓存值转换为通用类型时,我遇到了错误。这是正确的方式吗?还是我漏掉了什么?请参见下面的代码。
public class CacheHelper<T> : ICacheHelper<T>
{
private ICacheProvider _cacheProvider;
public CacheHelper(ICacheProvider cacheProvider)
{
_cacheProvider = cacheProvider;
}
public async Task<CacheResponse<T>> GetCacheValueAsync(string key)
{
RedisValue value = await _cacheProvider.GetCacheDatabase().StringGetAsync(key);
if (typeof(T).Equals(typeof(string)))
{
return value.HasValue
? new CacheResponse<T>(value) //I'm getting error here cannot cast type RedisValue to type T
: CacheResponse<T>.NoValue();
}
else
{
T obj = JsonConvert.DeserializeObject<T>(value);
return value.HasValue
? new CacheResponse<T>(obj)
: CacheResponse<T>.NoValue();
}
}
}
value
是一个RedisValue
,构造函数需要类型T
- 你必须进行强制转换或其他转换。 - fredrikCacheResponse
?你能提供它的文档链接吗? - Patrick HofmanConvert.ChangeType
对你无效? - Martin Zikmund