首先,我的代码如下:
public static class ApplicationCacheDictionary
{
private static Dictionary<string, Type> CacheDictionary = new Dictionary<string, Type>
{
{"X1", typeof (class1)},
{"X2", typeof (class2)},
};
public static Type GetMatchingType(string y, string x)
{
var key = x + y;
if (!CacheDictionary.ContainsKey(key))
return null;
else
return CacheDictionary[key];
return null;
}
}
然后在另一个班级,我有以下代码:
dynamic appCache = ApplicationCacheDictionary.GetMatchingType("X", "1");
dynamic result = ApplicationCache.Get<List<appCache>>("X1");
以下是Get:
的定义public static T Get<T>(string key) where T : class
{
try
{
return (T) Cache.Value[key];
}
catch (Exception exception)
{
return null;
}
}
我遇到的问题是行
dynamic result = ApplicationCache.Get<List<appCache>>("X1");
我收到以下错误消息:“是一个变量,但像类型一样使用”。我最初尝试使用以下代码解决此问题:
dynamic result = ApplicationCache.Get<List<dynamic>>("X1");
这已编译但我收到一个空值,其中应该有一个(实际类中的硬编码代替动态作品,但我试图摆脱它。)任何建议我还可以尝试什么得到这个吗?
答案 0 :(得分:6)
dynamic result = ApplicationCache.Get<List<appCache>>("X1");
在这一行中,您告诉ApplicationCache的Get方法使用类型List<appCache>
作为T.这不会起作用,因为您正试图通过在变量而不是类型作为泛型类型。这看起来也不像你想用这段代码完成的。
相反,调用这样的函数:
dynamic result = ApplicationCache.Get<dynamic>("X1");
这会将字典中的类型转换为动态并将其返回到动态变量。
尽管如此,这似乎并不能很好地利用泛型。您正在处理的缓存将始终返回Type
或null
。我不确定你的意图是什么。您是否只是想获得缓存类型?你想要一个该类型的实例化吗?