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

C#如何访问对象中的数组信息未知类型,c#,C#,我有一个名为SampleObject的对象,它包含一个名为StringArray的字符串数组。为了访问该数组中的第一个元素,我需要写入: ((string[])(SampleObject))[0] 但是,如果我不知道数组的类型,我将如何处理这个问题 ((SampleObject.GetType())(SampleObject))[0]; 我尝试了类似的方法,但它需要一个方法名 谢谢。您可以使用-所有数组类型都源自数组,无论元素类型是什么。不过,您可能需要仔细考虑矩形数组和具有非零下限的数组。

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

((string[])(SampleObject))[0]
但是,如果我不知道数组的类型,我将如何处理这个问题

((SampleObject.GetType())(SampleObject))[0];
我尝试了类似的方法,但它需要一个方法名


谢谢。

您可以使用-所有数组类型都源自
数组
,无论元素类型是什么。不过,您可能需要仔细考虑矩形数组和具有非零下限的数组。

如果它们将基于c#对象类,则可以使用GetType()-这将返回System.Type(请参阅)。否则,您可以基于自己的基本对象,该对象具有为所有可能值定义的类型。

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

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

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

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

您甚至可以确定它是一个数组吗?因此((string[])(SampleObject)).GetValue行中的某些内容。@George,如果您不知道适当的类型,它将类似于
var array=(Array)SampleObject;var item=Array.GetValue(0);
如果
SampleObject
实际上不是数组,那么这当然会非常壮观。虽然这是真的,并且您确实指定了引用类型,但只要对象持有
int[],它就会立即进入pot
.true,但是ILIst方法是最好的,因为这样您就不会被绑定到容器。