C# 如何从System.Object值中提取数组?

C# 如何从System.Object值中提取数组?,c#,types,C#,Types,使用一点反射,我从任意对象的属性和字段中获取值。由于该值可以是任何类型,FieldInfo.GetValue()和PropertyInfo.GetValue()都会返回System.Object的实例,然后任务是推断它是什么 我的问题来自数组类型的值(例如int[])。我打算从数组中提取值,但我不知道如何提取,所有在线查找解决方案的尝试都失败了。正如您在下面的示例中所看到的,我既可以确定对象确实是一个数组,也可以确定其元素类型,但除此之外,我不知道如何继续 static void DoThing

使用一点反射,我从任意对象的属性和字段中获取值。由于该值可以是任何类型,FieldInfo.GetValue()和PropertyInfo.GetValue()都会返回System.Object的实例,然后任务是推断它是什么

我的问题来自数组类型的值(例如int[])。我打算从数组中提取值,但我不知道如何提取,所有在线查找解决方案的尝试都失败了。正如您在下面的示例中所看到的,我既可以确定对象确实是一个数组,也可以确定其元素类型,但除此之外,我不知道如何继续

static void DoThingWithArray(this object value)
{
    Type type = value.GetType();
    if (type.IsArray)
    {
        Type elementType = type.GetElementType();
        //Extract array elements and length
    }
}

您可以利用数组在
系统中实现非泛型
IList
接口这一事实。集合
命名空间:

static void DoThingWithArray(this object value)
{
    Type type = value.GetType();
    if (type.IsArray)
    {
        IList array = (IList)value;
    }
}

现在,您可以通过索引、循环等方式提取值。

value
转换为
IEnumerable
?这是否回答了您的问题?您可以强制转换到
Array
,然后使用
GetValue
获取特定的elements@RandRandom感谢您的建议,它部分起作用,但不清楚如何获得值。Canton的方法奏效了,所以我就用了它。仅供参考,无论是谁想要结束这场比赛,类似的问题都没有解决当你不知道自己在投什么球时你会做什么,这是我的问题。我认为这个问题值得继续讨论。