2013-04-30 35 views
0

我正在使用反射从对象读取属性。将对象转换回值类型数组

如果我读取的值是引用类型(例如字符串[])我可以通过在阵列中的字符串施放此为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

你尝试'(IEnumerable的)SomeValue'? – Damith 2013-04-30 10:02:02

回答

4

C#出于某种原因不会将其重写为ValueType数组(可能会工作)。

不,它不会工作,因为表示是不同的。

协方差原因适用于引用类型阵列是一个参考的表示是相同的,无论它是指对象的类型的。这是而不是如果您比较值类型和引用类型。

例如,考虑:

byte[] x = { 1, 2, 3, 4 }; 

x每个元素是只是一个字节。你不能查看数组作为object[] - 每个元素根本就不是一个引用。

然而,你可以很容易通过拳击转换的每个元素,并创建这样一个列表:

List<Object> list = ((IEnumerable) WorkingHours).Cast<Object>().ToList(); 
+0

完美 - 这就是我一直在寻找,但不能完全得到它,谢谢! – 2013-04-30 14:24:43

相关问题