2013-04-30 41 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

相關問題