0

是否可以更改整个数组的类型,例如,我有:

object[] array; 

我想要:

MyObject[] array;

数组仅包含 MyObject 类型的项目,但我只能将其视为对象 [] 类型,如果我不想通过反射将此数组保存到我的对象,这不会是问题,如下所示:

class MyArrayObject
{
   public MyObject[] objects {get; set;} 
}

因此,如果我使用反射--MyArrayObject.GetType().GetProperty("objects").SetValue(array)我会得到异常,因为如果object[]类型不是数组MyObject[]-是否可以更改数组的类型,以便我可以通过反射将其添加到所需的属性?

object[]没有MyObject[]数组的原因是,我想将新项目添加到数组中,所以我需要调整它的大小或放入列表 - 然后它更改为 object[] 数组并不总是 MyObject[] 类型 - 它可以是 MyObject2、MyObject3 ..任何东西 - 我也通过反射得到它 - 所以问题是将项目添加到动态指定类型的数组中。谢谢!

4

3 回答 3

2

我有 object[] 而不是 MyObject[] 数组的原因是,我想将新项目添加到数组中,所以我需要调整它的大小或放入列表

这听起来像是一个List<MyObject>开始使用的理由。通常更喜欢列表而不是数组。

并不总是 MyObject[] 类型 - 它可以是 MyObject2、MyObject3 .. 任何东西

听起来是一个使用泛型的好地方。如果你真的需要使用反射,你总是可以使用Array.CreateInstance正确的元素类型。

于 2012-07-20T10:00:51.837 回答
0

我不知道是否有直接的方法,但作为一种解决方法,您可以遍历所有对象并将每个对象转换为 MyObject 并将转换的对象添加到集合中。我知道这不是最好的解决方案,性能也不是很好,但正如我所说,这只是一种解决方法。:)

于 2012-07-20T10:02:11.053 回答
0

使用 LINQ

array.Cast<MyObject>() // cast every element to MyObject

或者

array.OfType<MyObject>() // filters all MyObject elements 

如果要保留数组类型,则调用 .ToArray() 方法

总的来说不是很好,但最简单的理解和支持方式

于 2012-07-20T10:21:23.993 回答