使用 Activator.CreateInstance 创建 Dictionary(Of K,V) 的实例

发布于 2024-10-31 02:47:03 字数 420 浏览 1 评论 0原文

鉴于以下代码,我尝试根据我拥有的 ItemType 变量创建一个 Dictionary(Of String, ??) 的新实例。如何构造 DictType 以便我可以使用 Activator 创建我想要的类型的实例?

                Dim ItemType As Type            ' Data type of dictionary value
                Dim DictType As Type = ????     ' Dictionary(of String, ItemType)
                Dim NewDict = Activator.CreateInstance(DictType)

Given the below code, I'm trying to create a new instance of a Dictionary(Of String, ??) based on a ItemType variable I have. How do I construct the DictType so that I can use Activator to create an Instance of the type I'm after?

                Dim ItemType As Type            ' Data type of dictionary value
                Dim DictType As Type = ????     ' Dictionary(of String, ItemType)
                Dim NewDict = Activator.CreateInstance(DictType)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

萌吟 2024-11-07 02:47:03

假设您有一个 Type 类型的方法参数或局部变量,其名称为 typeVariable。那么答案是:

Dim dictType = GetType(Dictionary(Of ,)).MakeGenericType(GetType(String), typeVariable)

参见文档(http://msdn. microsoft.com/en-us/library/system.type.makegenerictype.aspx)作为示例,其中一个使用字典。

Assume you have a method parameter or local variable of type Type whose name is typeVariable. Then the answer is:

Dim dictType = GetType(Dictionary(Of ,)).MakeGenericType(GetType(String), typeVariable)

See the documentation (http://msdn.microsoft.com/en-us/library/system.type.makegenerictype.aspx) for examples, including one using Dictionary.

送君千里 2024-11-07 02:47:03

您正在寻找的是 GetType 方法。这将从指定/可绑定类型名称返回一个 Type 实例。例如

Dim dictType = GetType(Dictionary(Of String, Integer))
Dim newDict = Activator.CreateInstance(dictType)

EDIT

这是在编译时并非所有类型都已知的情况下创建Dictionary(Of Key, Value)类型的版本

Dim itemType As Type = ...
Dim dictRaw = GetType(Dictionary(Of ,))
Dim dictType = dictRaw.MakeGenericType(GetType(String), itemType)
Dim value = Activator.CreateInstance(dictType)

What you're looking for is the GetType method. This will return a Type instance from a stated / bindable type name. For example

Dim dictType = GetType(Dictionary(Of String, Integer))
Dim newDict = Activator.CreateInstance(dictType)

EDIT

Here's the version to create the Dictionary(Of Key, Value) type when not all of the types are known at compile time

Dim itemType As Type = ...
Dim dictRaw = GetType(Dictionary(Of ,))
Dim dictType = dictRaw.MakeGenericType(GetType(String), itemType)
Dim value = Activator.CreateInstance(dictType)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文