如何将分配给Object的c#基本类型数组转换为可以迭代的东西?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将分配给Object的c#基本类型数组转换为可以迭代的东西?相关的知识,希望对你有一定的参考价值。
我试图遍历一个Object中的字段(使用反射,通过FieldInfo)并转储它们的值...并且刚刚陷入C#vs Java陷阱。
我遇到的问题是这样的事实
- FieldInfo.GetValue(srcObject)可以返回一个int [](或其他一些原始值数组)作为Object
- c#不允许您将包含int []的Object转换为Object []
因此,如果
System.Object val = fieldInfo.GetValue(srcObject)
和
val.GetType().IsArray
返回'True'
......我需要做些什么
- 在运行时识别'val'是“一个数组的对象,而不是一个对象数组”?
- 将'value'转换为可以迭代的可打印值数组?
答案
您可以先将其强制转换为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
:
if (value.GetType().IsArray) {
var array = (Array)value;
然后你可以打电话给GetLength
:
int firstDimensionLength = array.GetLength(0);
int secondDimensionLength = array.GetLength(1);
以上是关于如何将分配给Object的c#基本类型数组转换为可以迭代的东西?的主要内容,如果未能解决你的问题,请参考以下文章
在 swift 中将 String 类型数组转换为 Float 类型数组 不能将类型 'String' 的值分配给类型 'Double' 的下标。