如何将分配给Object的c#基本类型数组转换为可以迭代的东西?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将分配给Object的c#基本类型数组转换为可以迭代的东西?相关的知识,希望对你有一定的参考价值。

我试图遍历一个Object中的字段(使用反射,通过FieldInfo)并转储它们的值...并且刚刚陷入C#vs Java陷阱。

我遇到的问题是这样的事实

  1. FieldInfo.GetValue(srcObject)可以返回一个int [](或其他一些原始值数组)作为Object
  2. c#不允许您将包含int []的Object转换为Object []

因此,如果

System.Object val = fieldInfo.GetValue(srcObject)

val.GetType().IsArray返回'True'

......我需要做些什么

  1. 在运行时识别'val'是“一个数组的对象,而不是一个对象数组”?
  2. 将'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' 的下标。

在C#中,如何将键盘的空输入转换为可空类型的布尔变量?

C语言 如何给指针数组划分动态存储空间

javascript怎样将object类型转换成array数组

如何将char类型数组转换为unicode字符串