Vb.net 如何为已知的值类型创建字典?

Vb.net 如何为已知的值类型创建字典?,vb.net,reflection,.net-4.0,dictionary,Vb.net,Reflection,.net 4.0,Dictionary,我想创建一个字典,其中键类型是Integer,值类型是我当前正在执行的类的类型 我尝试了以下方法: Dim col as new Dictionary(Of Integer, Me.GetType()) 但我得到一个错误,说明`关键字没有命名类型 如何根据执行类的类型创建字典?C#为类型创建int字典的示例 使用的方法: 问题主要是以某种类型安全的方式表示结果类型。在Dictionary的情况下,可以使用IDictionary,或者继续使用反射来操作对象 也可以用泛型代码以某种方式表

我想创建一个字典,其中键类型是Integer,值类型是我当前正在执行的类的类型

我尝试了以下方法:

Dim col as new Dictionary(Of Integer, Me.GetType())
但我得到一个错误,说明`关键字没有命名类型

如何根据执行类的类型创建字典?

C#为类型创建
int
字典的示例

使用的方法:

问题主要是以某种类型安全的方式表示结果类型。在
Dictionary
的情况下,可以使用
IDictionary
,或者继续使用反射来操作对象

也可以用泛型代码以某种方式表达大多数操作,而泛型代码是通过
MakeGenericMethod

样本:

var myType=typeof(Guid);//某种类型
//获取未来字典的类型
类型generic=typeof(字典);
类型[]typeArgs={typeof(int),myType};
var concrete=generic.MakeGenericType(typeArgs);
//获取并调用构造函数
var constructor=concrete.GetConstructor(新类型[0]);
var dictionary=(IDictionary)构造函数.Invoke(新对象[0]);
//使用界面的非通用版本添加项
添加(5,新Guid());
Console.Write(字典[5]);
//尝试添加错误类型的项显然会失败
//增加(6,“测试”);
C#为类型创建
int
字典的示例

使用的方法:

问题主要是以某种类型安全的方式表示结果类型。在
Dictionary
的情况下,可以使用
IDictionary
,或者继续使用反射来操作对象

也可以用泛型代码以某种方式表达大多数操作,而泛型代码是通过
MakeGenericMethod

样本:

var myType=typeof(Guid);//某种类型
//获取未来字典的类型
类型generic=typeof(字典);
类型[]typeArgs={typeof(int),myType};
var concrete=generic.MakeGenericType(typeArgs);
//获取并调用构造函数
var constructor=concrete.GetConstructor(新类型[0]);
var dictionary=(IDictionary)构造函数.Invoke(新对象[0]);
//使用界面的非通用版本添加项
添加(5,新Guid());
Console.Write(字典[5]);
//尝试添加错误类型的项显然会失败
//增加(6,“测试”);

只需将类名
Dim col用作新字典(整数,MyClass)


另一方面,不使用integer作为键可能会让人困惑,因为字典也使用integer作为索引。如果键是连续的整数,最好是列表。

只需使用类名
Dim col作为新字典(Integer,MyClass)


另一方面,不使用integer作为键可能会让人困惑,因为字典也使用integer作为索引。如果键是连续的整数,最好是列表。

?@AlexeiLevenkov如何将项添加到字典中?它从来没有真正构造过字典,只是一个类型。你得到类型,然后调用构造函数,然后添加项(不幸的是,我不知道如何在VB.Net中表达它,我可以给C#sample)。。。但我希望有人能提出更合理的解决方案。在C#中,用代码表示结果类型也会有问题(我认为,
IDictionary
可能是唯一的选择)-对VB.Net不太确定。@AlexeiLevenkov用C#中的一个例子就可以了@AlexeiLevenkov我该如何向字典添加条目?它从来没有真正构造过字典,只是一个类型。你得到类型,然后调用构造函数,然后添加项(不幸的是,我不知道如何在VB.Net中表达它,我可以给C#sample)。。。但我希望有人能提出更合理的解决方案。在C#中,用代码表示结果类型也会有问题(我认为,
IDictionary
可能是唯一的选择)-不确定VB.Net。@AlexeiLevenkov C#中的一个例子会很好。这行是什么
var constructor=concrete.GetConstructor(新类型[0])
What Type[0]??@AngryHacker
GetConstructor
需要数组
Type
对象指定构造函数每个参数的类型(以查找匹配项)<代码>新类型[0]是由0个元素组成的数组-我正在寻找具有0个参数的构造函数。如果你需要其他的构造器,你可能需要调整它。这条线是什么
var constructor=concrete.GetConstructor(新类型[0])
What Type[0]??@AngryHacker
GetConstructor
需要数组
Type
对象指定构造函数每个参数的类型(以查找匹配项)<代码>新类型[0]是由0个元素组成的数组-我正在寻找具有0个参数的构造函数。如果需要其他构造函数,您可能需要调整它。