C#对象到数组

Geo*_*ffM 23 c# arrays reflection collections casting

使用反射我有一个对象,我需要将其转换为可迭代的项目列表(类型未知,将是对象).使用Watch窗口我可以看到我的对象是某种类型的数组,因为它告诉我元素的数量,我可以爆炸树视图来查看元素本身.

首先,我需要检查传递的对象是某种数组(可能是List,可能是object []等).然后我需要遍历该数组.但是,我无法进行类型转换.

这是我如何使用它(缩写):

    private static void Example(object instance, PropertyInfo propInfo)
    {
        object anArray = propInfo.GetValue(instance, null);
        ArrayList myList = anArray as ArrayList;
        foreach (object element in myList)
        {
            // etc
        }
    }
Run Code Online (Sandbox Code Playgroud)

我尝试了各种不同的演员阵容.上面没有引发异常,但是当anArray实际存在且包含项目时,mylist为null.保存的实际实例是强类型List <>,但如果需要,可以采用有限的表单子集.但是练习的重点是这个Example()方法不知道属性的基本类型.

Mat*_*vey 44

如果对象实际上 ArrayList,那么将它转换为ArrayList只会起作用.它不能与System.Array或System.Collections.Generic.List`1一起使用.

我认为你实际应该做的是将其转换为IEnumerable,因为这是你循环它的唯一要求......

object anArray = propInfo.GetValue(instance, null);
IEnumerable enumerable = anArray as IEnumerable;
if (enumerable != null)
{
    foreach(object element in enumerable)
    {
        // etc...
    }
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*rth 14

试着去投IEnumerable.这是所有枚举,数组,列表等实现的最基本的接口.

IEnumerable myList = anArray as IEnumerable;
if (myList != null)
{
    foreach (object element in myList)
    {
        // ... do something
    }
}
else
{
    // it's not an array, list, ...
}
Run Code Online (Sandbox Code Playgroud)


小智 5

只需尝试一下

 string[] arr = ((IEnumerable)yourOjbect).Cast<object>()
                             .Select(x => x.ToString())
                             .ToArray();
Run Code Online (Sandbox Code Playgroud)