我使用反射来读取对象的属性。
如果我读取的值是引用类型(例如String []),我可以将其转换为Object []数组并循环遍历数组中的字符串。
String[] Workers = { "Steve", "Sally", "Jim" };
Object SomeValue = Workers;
// Prented that SomeValue is returned from reflection
List<Object> SomeList = new List<Object>((Object[])SomeValue);
但是,当对象是值类型的数组时,我无法将其重新转换为数组。我已经尝试了一切。 C#由于某种原因不会将其重新命名为ValueType数组(认为可能有效)。
Int32[] WorkingHours = { 1, 2, 65, 6 };
Object SomeValue = WorkingHours;
// Prented that SomeValue is returned from reflection
List<Object> SomeList = new List<Object>((ValueType[])SomeValue);
有什么建议吗?
答案 0 :(得分:4)
由于某种原因,C#不会将其重新命名为ValueType数组(认为可能会有效)。
不,它不起作用,因为表示不同。
协方差适用于引用类型数组的原因是引用的表示是相同的,无论它引用的对象的类型如何。如果比较值类型和引用类型,则不。
例如,考虑:
byte[] x = { 1, 2, 3, 4 };
x
的每个元素只是一个字节。您无法将该数组视为object[]
- 每个元素都不是参考。
但是,您可以通过装箱轻松转换每个元素并创建一个列表:
List<Object> list = ((IEnumerable) WorkingHours).Cast<Object>().ToList();