C#对象到数组

使用reflection我有一个对象,我需要将其转换为可迭代的项目列表(类型未知,将是对象)。 使用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 } } 

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

如果对象实际上 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... } } 

尝试强制转换为IEnumerable 。 这是所有枚举,数组,列表等实现的最基本的接口。

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

试试吧

  string[] arr = ((IEnumerable)yourOjbect).Cast() .Select(x => x.ToString()) .ToArray(); 

试试这个:

  var myList = anArray as IEnumerable; if (mylist != null) { foreach (var element in myList) { // etc } } 

您可能还需要指定IEnumerable的generics类型,具体取决于您的具体情况。

如果它是任何排序(数组,列表等)的集合,您应该能够将其IEnumerableIEnumerablePropertyInfo还包含一个PropertyType属性,如果您愿意,可以使用它来查找实际类型。