C#如何在对象中访问数组信息未知类型

时间:2011-10-24 15:33:36

标签: c#

我有一个名为SampleObject的对象,它包含一个名为StringArray的字符串数组。为了让我访问该数组中的第一个元素,我需要写:

((string[])(SampleObject))[0]

但是,如果我不知道数组的类型,我将如何处理它?<​​/ p>

((SampleObject.GetType())(SampleObject))[0];

我尝试了类似的东西,但它需要一个方法名称。

感谢。

4 个答案:

答案 0 :(得分:5)

您可以使用Array.GetValue - 所有数组类型都派生自Array,无论元素类型是什么。您可能需要仔细考虑矩形数组,以及具有非零下限的数组。

答案 1 :(得分:1)

虽然Jon的答案是正确的,但如果您有一个正常(一维,从0开始)的引用类型数组,则可以滥用数组协方差。

return ((object[])SampleObject)[3];

返回数组中的第3个元素。如果它不仅会更改元素类型,而且可能更改容器本身,也可以将其强制转换为非泛型IList

答案 2 :(得分:0)

如果它们将基于c#对象类,则可以使用GetType() - 这将返回System.Type(请参阅http://msdn.microsoft.com/en-us/library/system.object.gettype.aspx)。否则,您可以将它们基于您自己的基础对象,该基础对象具有为所有可能值定义的类型。

答案 3 :(得分:0)

另一种方法是使用Reflection来确定类型并操纵数据。虽然这适用于所有类型的对象(不仅仅是数组),但对于您描述的场景,我会使用Jon Skeet的解决方案。