如何使用字典引用动态类型

本文关键字:动态 类型 引用 字典 何使用 | 更新日期: 2023-09-27 18:28:22

因此,首先,我的代码如下:

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");

这是编译的,但我收到了一个空值,应该有一个(在实际类中硬编码,代替动态工作,但我正在努力摆脱它。)关于我还可以尝试做什么,有什么建议吗?

如何使用字典引用动态类型

dynamic result = ApplicationCache.Get<List<appCache>>("X1");

在这一行中,您告诉ApplicationCache的Get方法使用类型List<appCache>作为T。这是行不通的,因为您试图传入一个变量,而不是一个类型作为泛型类型。这似乎也不是您想要使用此代码实现的目标。

相反,调用如下函数:

dynamic result = ApplicationCache.Get<dynamic>("X1");

这将把字典中的类型强制转换为dynamic,并将其返回给您的动态变量。

也就是说,这似乎不是泛型的好用途。您正在处理的缓存将始终返回Typenull。我不知道你在这里的意图是什么。你只是想获取一个缓存的类型吗?你想要那个类型的实例化吗?