来自ReturnType的通用类型转换

时间:2016-06-02 00:58:47

标签: c# generics

我正在使用与我们的缓存服务交互的拦截器(从RealProxy扩展)。我提供密钥并返回JSON有效负载。返回类型从调用函数(MethodInfo.ReturnType)反映出来,用于根据需要强制转换返回的object

public object Get(string key, Type type) {
    string value = cache[key];
    return JsonConvert.DeserializeObject(value, type);
}

出于好奇,我想利用泛型来实现这一目标。我知道你不能从Type变量中指定泛型类型。有没有办法完成以下任务?

public T Get<T>(string key) {
    string value = cache[key];
    return JsonConvert.DeserializeObject<T>(value);
}

调用代码是(简化):

Type returnType = methodInfo.ReturnType;
object cachedValue = cacheService.Get(key, returnType);

if (cachedValue != null) {
    // return cached value
} else {
    // continue running
}

我有兴趣这样做的原因是我想使用不同的缓存提供程序(redis,特别是StackExchange.Redis.Extensions.Newtonsoft),我们当前的缓存/检索方法不会简单地插入调用像这样:

User cachedUser = cacheClient.Get<User>("my cache key");

0 个答案:

没有答案