18

object[]パラメータとして期待するCOM関数があります。

foo(object[] values)

enumいくつかのフィールドを渡したいので、次を使用します。

object[] fields = (object[])Enum.GetValues(typeof(SomeEnumType));

ただし、ie [ ]に​​渡そfieldsうとすると、エラーが発生します。foo(...)foo(fields)

「タイプ`SomeEnumType[]'のオブジェクトをタイプ'system.Object[]'にキャストできません。

誰かが私が間違っていることを教えてもらえますか?

4

3 に答える 3

27

SomeEnumType[]例外として、キャストをに変換することはできませんobject[]。前者は、各値が値である配列SomeEnumTypeです。後者は、各要素が参照である配列です。

LINQを使用すると、新しいアレイを簡単に作成できます。

object[] fields = Enum.GetValues(typeof(SomeEnumType))
                      .Cast<object>()
                      .ToArray();

これは基本的に、各要素(各列挙値)をボックス化してを作成しIEnumerable<object>、そこから配列を作成します。これはTilakのアプローチに似てCastいますが、実際には汎用の投影が必要ない場合に使用することを好みます。

または:

SomeEnumType[] values = (SomeEnumType[]) Enum.GetValues(typeof(SomeEnumType));
object[] fields = Array.ConvertAll(values, x => (object) x);
于 2012-05-21T06:10:59.050 に答える
3
Enum.GetValues(typeof(SomeEnumType)).Cast<object>().ToArray()
于 2012-05-21T06:11:15.897 に答える
1

適切な配列型をキャストする必要があります。これらの線に沿って何かを試してください:

object[] fields = (object[])Enum.GetValues(typeof(SomeEnumType)).Cast<object>().ToArray();

エラーメッセージは、関数が「object」型のオブジェクト配列を予期しており、「SomeEnumType」型のいずれかを渡しているため、型の不一致があることを示しています。

于 2012-05-21T06:10:39.917 に答える