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