创建未知类型的数组。 C#

Posted

技术标签:

【中文标题】创建未知类型的数组。 C#【英文标题】:Creating array of unknown type. C# 【发布时间】:2011-07-25 08:30:39 【问题描述】:

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

我不知道如何使用这些信息(我知道数据的类型是类型 t。)如何构造一个数组 t[],以便在调用时可以转换到那个数组类型。

例如,现在如果我有一个需要整数数组作为参数的函数,我当前正在传递一个对象[],其中另一个对象[] 里面填充了整数,但你不能只转换object[] 到 int[] 所以调用失败。

我无法编写 switch case,因为无法预测所有可能的类型(例如,在加载的 dll 中定义的某些其他类的实例)

【问题讨论】:

【参考方案1】:

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

【讨论】:

+1 jeez =O 问题在14:29:01Z 提出,在14:29:42Z 回答! 好吧,我是新来的,所以我没有足够的声望来支持你,但是是的。这正是我所需要的。非常感谢! @Steven:到现在为止,投票与我无关,但感谢您的接受,谢谢:)【参考方案2】:

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

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

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

结合MakeGenericType,它可以为您提供所需的灵活性。

【讨论】:

以上是关于创建未知类型的数组。 C#的主要内容,如果未能解决你的问题,请参考以下文章

C# - 更改多维数组元素类型

如何用c语言判断一个未知文件的文件类型

Java 在 int 或 String 之间返回(未知返回类型)

集合与数组

自定义输入类型的 Apollo 数组作为 Mutation 参数抛出“__typename”:未知字段错误

C语言中从广西读入未知长度的数字,放个数组