C# 如何从System.Object值中提取数组?
使用一点反射,我从任意对象的属性和字段中获取值。由于该值可以是任何类型,FieldInfo.GetValue()和PropertyInfo.GetValue()都会返回System.Object的实例,然后任务是推断它是什么 我的问题来自数组类型的值(例如int[])。我打算从数组中提取值,但我不知道如何提取,所有在线查找解决方案的尝试都失败了。正如您在下面的示例中所看到的,我既可以确定对象确实是一个数组,也可以确定其元素类型,但除此之外,我不知道如何继续C# 如何从System.Object值中提取数组?,c#,types,C#,Types,使用一点反射,我从任意对象的属性和字段中获取值。由于该值可以是任何类型,FieldInfo.GetValue()和PropertyInfo.GetValue()都会返回System.Object的实例,然后任务是推断它是什么 我的问题来自数组类型的值(例如int[])。我打算从数组中提取值,但我不知道如何提取,所有在线查找解决方案的尝试都失败了。正如您在下面的示例中所看到的,我既可以确定对象确实是一个数组,也可以确定其元素类型,但除此之外,我不知道如何继续 static void DoThing
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的方法奏效了,所以我就用了它。仅供参考,无论是谁想要结束这场比赛,类似的问题都没有解决当你不知道自己在投什么球时你会做什么,这是我的问题。我认为这个问题值得继续讨论。