使用包含 Type 的变量创建 Generic<T> 类型实例

Posted

技术标签:

【中文标题】使用包含 Type 的变量创建 Generic<T> 类型实例【英文标题】:Creating a Generic<T> type instance with a variable containing the Type 【发布时间】:2011-01-05 22:34:29 【问题描述】:

下面的代码可以实现吗?我知道它不起作用,但我想知道是否有解决方法?

Type k = typeof(double);
List<k> lst = new List<k>();

【问题讨论】:

对您的评论“这可以在 C# 4.0 中完成”有点困惑。它不能,至少不能以你展示它的方式。 C# 4 仍然需要在编译时指定泛型类型参数;您仍然不能将 Type 变量作为泛型类型参数传递。 当它是一个问题时,请将其表述为一个问题。指定的代码不能用 C# 4.0 完成。 类似问题:***.com/questions/687363/… 对 C# 4.0 的事情感到抱歉。我的意思是答案可以使用 C# 4.0 中的概念,不一定是代码可以在 C# 4.0 中工作。感谢 DrJokepu 的编辑。 我认为这个问题说得很完美——细节恰到好处! 【参考方案1】:

更简洁的方法可能是使用泛型方法。做这样的事情:

static void AddType<T>()
    where T : DataObject

    Indexes.Add(typeof(T), new Dictionary<int, T>());

【讨论】:

我不确定您所说的“索引”是什么意思,是在别处声明的变量吗?【参考方案2】:

是的,有:

var genericListType = typeof(List<>);
var specificListType = genericListType.MakeGenericType(typeof(double));
var list = Activator.CreateInstance(specificListType);

【讨论】:

我想这就是我想要的。让我仔细检查一下,我会立即将您的答案标记为答案。 我认为这里的主要问题是你没有向我们描述你想要什么。你向我们展示了某事的失败尝试,然后询问如何完成你想要的。如果您想要答案而不是猜测,您应该描述您需要做什么,而不是您尝试如何去做。 我基本上是想创建一个 List,其中类型被指定为 Type 变量。 感谢 David M,您的代码完全符合我的需要。很抱歉那些因为我没有提供足够的问题而无法回答的人。 通用方法可以这样做吗?我需要传递方法的动态类型,我已经在下面的链接***.com/questions/4101784/…上发布了我的问题

以上是关于使用包含 Type 的变量创建 Generic<T> 类型实例的主要内容,如果未能解决你的问题,请参考以下文章

如果 x 在集合 L 中,如何使用 lambda 函数创建返回 true 的函数 L

C 基础 _Generic 泛型应用

通过Generic方法传递Type的新实例

Python 字符串

C#依赖注入相同Generic Type的多个实现

毁三观的变量定义