是否可以更改整个数组的类型,例如,我有:
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 ......任何东西 - 我也通过反射得到它 - 所以问题是将项目添加到其动态指定类型的数组中。
谢谢!
答案 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()方法,如果你想保持数组类型
一般来说不是很好,但最简单的理解和支持方式