2016-05-13 87 views
0

我需要將short []轉換爲對象[]。原因是需要我在相同的成員變量中存儲short []或char [],具體取決於另一個屬性。我使用的類是用C++/CLI編寫的,並使用C#。 C++/CLI屬性是將C#short []轉換爲對象[]

property cli::array<Object^>^ Data { 
    cli::array<Object^>^ get(); 
    void set(cli::array<Object^>^ d); 
} 

有沒有人知道如何將short []或char []轉換爲object []?還是有更好的解決方案,不要使用cli::array<Object^>^作爲基礎數據類型?


更新:我知道我可以通過所有這些項目走,並將其轉換爲對象或使用LINQ的方法shortArr.Cast<object>().ToArray()。但我想有一個更高性能的解決方案,所以也許有一種方法可以爲這個屬性使用另一個基礎數據類型?

+0

「一個短[]或一個char []在同一個成員變量,根據另一個屬性」 - 爲什麼?這聽起來像是一個X/Y問題。 C#中的屬性是免費的,並且C#還支持''StructLayout]''類似'union'結構。 – Dai

+0

「或者有更好的解決方案,不要使用'cli :: array ^'作爲基礎數據類型?」 - 這似乎是一個很好的問題,但它需要更多的信息才能得到有用的答案,而且它與您的主要問題無關。 – hvd

+0

沒有轉換,數組內容在內存中物理上不同。它從每個元素4個或8個字節(取決於位數)摺疊爲2或1.因此,您必須*複製。如果性能很重要,則一系列盒裝值不屬於您的功能列表。 –

回答

2

使用object[]代替char[]short[]在內存和CPU週期方面都是浪費。

由於兩個char[]short[]延伸Array,可以同時存儲種陣列中Array^類型的變量,然後根據需要強制轉換爲所需的類型。

+0

是的,但據我所知,我不能聲明一個類型爲'cli :: array ^'的C++/CLI屬性而不指定數組類型。在C#中這是可能的。 – Mirko

+1

@Mirko我認爲這個類型應該是'Array ^',而不是'cli :: array ^'。 – dasblinkenlight

+1

謝謝你的解決方案。如果你做出答案,我可以將其標記爲解決方案。 – Mirko

1

不,你必須通過所有的項目。

C#,需要拳擊到ValueType存儲到object變量,因此陣列中的所有short值必須盒裝成一object[]陣列一個接一個。