下面的示例显示了意图。该示例正在遍历一个对象数组,并创建一个加载了默认值的相同类型的数组。值本身不需要从一个列表复制到下一个列表。这是列表的“类型克隆”。
下面的代码会为 Activator 产生以下错误:
“System.Int32 不是 GenericTypeDefinition。MakeGenericType 只能在 Type.IsGenericTypeDefinition 为真的类型上调用。”
Activator、CreateInstance 和 MakeGenericType 的细节还是让我有点困惑。
如何更改代码以避免错误?
任何建议,将不胜感激。
private void Test()
{
object[] a = new object[] {100, "Text", new clsMyClass()};
object[] b = new object[a.Length];
for (int i = 0; i < a.Length; i++)
{
b[i] = Activator.CreateInstance(a[i].GetType().MakeGenericType());
}
for (int i = 0; i < b.Length; i++)
{
Console.WriteLine(b[i].GetType().ToString());
}
}
预期的输出将是:
- System.Int32
- 系统字符串
- MyNamespace.clsMyClass
结果值为:
- b[0] = 0
- b[1] = ""
- b[2] = 新的 clsMyClass