[英]how to transform array of c# primitive type assigned to Object into something I can iterate through?
我試圖遍歷對象中的字段(使用反射,通過FieldInfo)並轉儲它們的值...而只是陷入了C#vs Java陷阱。
我遇到的問題是
FieldInfo.GetValue(srcObject)可以將int [](或其他一些原始值數組)作為Object返回
C#不允許您將持有int []的對象轉換為Object []
因此,如果
System.Object val = fieldInfo.GetValue(srcObject)
和
val.GetType().IsArray
返回'True'
...我需要做什么
在運行時是否認識到“ val”是“一個對象,它是一個數組,而不是對象的數組”?
變換“VAL”到我可以遍歷可印刷值的陣列?
您可以首先將其轉換為System.Collections.IEnumerable
,因為所有數組都是可枚舉的:
Foo f = new Foo();
var fieldInfo = typeof(Foo).GetField("field");
var value = fieldInfo.GetValue(f);
if (value.GetType().IsArray) {
var enumerable = (IEnumerable)value;
foreach (var item in enumerable) {
Console.WriteLine(item);
}
}
如果您具有多維數組,並且想要獲取每個維的長度,則可以將其Array
為Array
:
if (value.GetType().IsArray) {
var array = (Array)value;
然后,您可以致電GetLength
:
int firstDimensionLength = array.GetLength(0);
int secondDimensionLength = array.GetLength(1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.