3

カスタムタイプの配列をEnumパラメータとして受け取りたいメソッドがあります。

このように見えるもの:

public void DoSomething(WhatDoIPutHere[] parameters)

Enum1[]このメソッドにaまたはaのいずれかを渡したいのですEnum2[]が、Enum1Enum2は2つEnumのタイプです。

代わりに何を使用する必要がありWhatDoIPutHereますか?

Enum[]どういうわけEnumか列挙型の基本クラスであるように、DoSomethingのシグネチャを定義することを期待していました(右?):

public void DoSomething(Enum[] parameters)

しかし、それは:を与えます

'xxx.Enum1[]'から'System.Enum[]'に変換できません

として定義しようとしましobject[]たが、同じ種類のコンパイラエラーが発生します。

私はこれが完全に臭いコードであることを知っています、そして私ができれば私は間違いなくそれを取り除くでしょう...

4

1 に答える 1

6

できません。値型配列は共変ではありません。あなたは一種の書きたいです:

public void DoSomething<T>(T[] parameters) where T : struct, System.Enum

...しかし、それも許可されていません(タイプパラメーターを列挙型またはデリゲート型に制限することはできません)。

オプション:

  • 任意の配列を許可します。

    public void DoSomething(Array parameters)
    
  • 値型の任意の配列を許可します。

    public void DoSomething<T>(T[] parameters)
    
  • Unconstrained Melodyを使用して、IL書き換えハックを介して最初のフォームを作成します。

于 2012-04-12T08:22:07.943 に答える