在C#中使用反射时,你应该传递一个稍后投射的参数的对象[],我有一个gui,让用户输入参数值。我知道它们是什么类型的输入期望输入,int,字符串,浮点,自定义对象的实例等等...在参数是某种类型的数组int [] foo []的情况下,它允许用户构造该类型的数组,并添加/删除元素。
我不知道的是我如何使用这些信息(我知道数据的类型是类型t。)我如何构造一个数组t [],这样当它被赋予调用时,它可以转换到那个数组类型。
例如,现在如果我有一个需要一个整数数组作为参数的函数,我当前正在传递一个对象[],其中包含另一个用整数填充的对象[],但你不能只是object [] to int []所以调用失败。
我无法编写一个switch case,因为它无法预测所有可能的类型(例如,在加载的dll中定义的其他类的实例)
答案 0 :(得分:13)
您在寻找Array.CreateInstance
吗?如果您只知道动态类型,那么这很有用。如果您在静态方法中静态地知道它,则可以使用new T[10]
或类型参数名称。
答案 1 :(得分:0)
这不能回答这个问题,但我觉得这可能是一个值得一提的建议。
如果它是一个可以通过传递int
数组以及object
数组来调用的方法,那么您似乎正在实现一种可以通过泛型表达的无类型行为。
我建议使用IEnumerable<T>
将其更改为通用方法。当然,索引不能访问IEnumerable<T>
(数组可以),但不确定这是你真正需要的。
与MakeGenericType结合使用,可以为您提供所需的灵活性。