我想创建一个字典,其中键类型是整数,值类型是我目前正在执行的类的类型。
我试过以下方法:
Dim col as new Dictionary(Of Integer, Me.GetType())
但是我得到一个错误,说' keyword没有命名一个类型。
如何根据执行类的类型创建字典?
创建int
类型字典的c#示例。
方法:
- 类型。MakeGenericType
- 类型。GetConstructor
- ConstructorInfo。调用
问题主要是用某种类型安全的方式表达结果类型。在Dictionary
的情况下,可以求助于IDictionary
,或者继续使用反射来操纵对象。
也可能以某种方式用通用代码表达大多数操作,这些代码由MakeGenericMethod
的更多反射调用
var myType = typeof(Guid); // some type
// get type of future dictionary
Type generic = typeof(Dictionary<,>);
Type[] typeArgs = { typeof(int), myType };
var concrete = generic.MakeGenericType(typeArgs);
// get and call constructor
var constructor = concrete.GetConstructor(new Type[0]);
var dictionary = (IDictionary)constructor.Invoke(new object[0]);
// use non-generic version of interface to add items
dictionary.Add(5, new Guid());
Console.Write(dictionary[5]);
// trying to add item of wrong type will obviously fail
// dictionary.Add(6, "test");
直接使用类名Dim col as new Dictionary(Of Integer, MyClass)
在不使用整数作为键的另一方面可能会引起混淆,因为字典也使用整数作为索引。如果键是连续整数,那么使用列表可能会更好。