2016-05-13 7 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); 
} 

誰もが短い[]またはchar [] []をオブジェクトに変換する方法を知っていますか?または、基本データ型としてcli::array<Object^>^を使用しない方がよい解決策がありますか?


更新:は、私はこれらの項目のすべてを歩くとオブジェクトまたはLINQのメソッドshortArr.Cast<object>().ToArray()を使用するように変換することができ知っています。しかし、よりパフォーマンスの高いソリューションを提供したいと思います。このプロパティに別の基本データ型を使用する方法がありますか?

+0

"同じメンバー変数内のshort []または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私は、型が 'cli :: array ^'ではなく 'Array ^'であるべきだと思います。 – dasblinkenlight

+1

ありがとうございました。あなたが答えを出すなら、それを解決策としてマークすることができます。 – Mirko

1

いいえ、すべての項目を通過する必要があります。 C#

、ボクシングのように、アレイ内のすべてのshort値がobject[]アレイ一つずつに設定することが箱詰めされなければならない、object変数にValueTypeを格納するために必要とされます。

関連する問題