2011-03-29 75 views
5

在C#中使用反射时,您需要传递稍后投射的参数的对象[],我有一个让用户可以输入参数值的GUI。我知道它们是什么类型的输入期望输入,int,string,float,自定义对象的实例等等......在参数是某种类型的数组int [] foo []的情况下,它允许用户构造该类型的数组,并添加/删除元素。创建未知类型的数组。 C#

我不知道的是我如何使用这些信息(我知道数据的类型是类型t)。我怎样才能构造一个数组t [],这样,当它给出调用时,它可以转换为该数组类型。

例如现在,如果我有一个函数,需要一个整数数组作为参数,我目前正在传递一个对象[]与另一个对象[]里面充满了整数,但你不能只是将对象[]转换为int [],以便调用失败。

,因为它是不可能预测到所有可能的类型也可能是(在加载的DLL定义的其它一些类的实例,例如)我不能写一个开关的情况下

回答

12

您是否在寻找Array.CreateInstance?如果您只知道动态类型,这很有用。如果你知道它是静态的,但在一般方法中,你可以使用new T[10]或任何类型参数名称。

+2

+1 jeez = O问题在'14:29:01Z'被问到,在'14:29:42Z'回答! – gideon 2011-03-29 14:39:44

+0

嗯,我在这里是新来的,所以我没有足够的声望来夸耀你,但是。这是_exactly_我​​所需要的。非常感谢你! – 2011-03-29 15:58:44

+0

@Steven:每天的这段时间upvote与我无关,但接受感谢,谢谢:) – 2011-03-29 16:01:13

0

这并没有回答这个问题,但我觉得这可能是值得一提的建议。

如果它是一种可以通过传递数组int以及object的数组来调用的方法,那么似乎您正在实现一种可以用泛型表示的无类型行为。

我建议使用IEnumerable<T>将其更改为通用方法。当然,IEnumerable<T>不能通过索引访问(虽然数组可以),但不知道这是你真正需要的。

结合MakeGenericType,它可以给你你需要的灵活性。