改变数组的类型

时间:2012-07-20 09:58:04

标签: c# arrays object reflection

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

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 ......任何东西 - 我也通过反射得到它 - 所以问题是将项目添加到其动态指定类型的数组中。 谢谢!

3 个答案:

答案 0 :(得分:2)

  

原因我有对象[]而不是MyObject []数组,我想将新项目添加到数组中,所以我需要调整它或者列出列表

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

  

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

听起来像是一个使用泛型的好地方。如果您确实需要使用反射,则可以始终使用具有正确元素类型的Array.CreateInstance

答案 1 :(得分:0)

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

答案 2 :(得分:0)

使用LINQ

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

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

然后调用.ToArray()方法,如果你想保持数组类型

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