2012-04-12 12 views
3

私はのカスタムEnumタイプの配列をパラメータとして取りたいと思う方法があります。列挙型の配列の「一般的な」型は何ですか?

このようなり何か:私はこの方法Enum1Enum2は2つのEnumタイプですEnum1[]またはEnum2[]のいずれかに渡すしたい

public void DoSomething(WhatDoIPutHere[] parameters) 

を。

WhatDoIPutHereの代わりに何が必要ですか?私はのように何とかEnum[]EnumとしてのdoSomethingの署名を定義することが期待されるだろう

は、列挙型(?右)の基本クラスです:

public void DoSomething(Enum[] parameters) 

が、それは与える:

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

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

答えて

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を書き直すことによってHA ck。

  • +0

    すごい、ありがとう、それは迅速かつ徹底的な答えでした!私は最初のオプションのために行くつもりです...私は実際にメソッドシグネチャをあまりにも(つまりジェネリックタイプを追加する)変更することはできませんので、オプション2は外です...オプション3 ..私はおそらく、しかし別の時間:) – tsimbalar

    関連する問題