1

ジェネリック型の Enum 制約を作成する方法について、多くの質問が飛び交っています。ex1ex2ex3など

さらに一歩進んで、一般的なメソッドへの制約として特定のローカルに定義された列挙型のみを要求できるかどうかに興味がありました。

現在、ジェネリック型の列挙型を許可するために、ジェネリック型の構造体 Iconvertible 制約を使用するという提案されたソリューションを使用しています。vb.net では次のようになります。

Private Function MyMethod(Of T As {Structure, IConvertible})(ByVal myEnum As T) As Object
     '...
End Function

次に、次のように定義された 2 つの列挙型のみに制約をさらに強制したい場合はどうなるでしょうか。

Public Enum EnumOne
    Height
End Enum

Public Enum EnumTwo
    Width
End Enum

私はまだ構文を理解できていません。

私は VB.net でプログラミングしていますが、C# の回答も歓迎します。

4

1 に答える 1

1

いいえ、型引数をそのように制約することはできません。これらの列挙型には共通点がありません。2 つの型引数の型のみを処理できるジェネリック関数にはあまり価値がありません。関数の 2 つの非ジェネリック オーバーロードを提供するだけの方がはるかに簡単です。

Private Function MyMethod(ByVal value as EnumOne) As Object
     '' etc
End Function

Private Function MyMethod(ByVal value as EnumTwo) As Object
     '' etc
End Function

これらの関数に共通の実装を提供するおそらく別のプライベート メソッドを使用します。

于 2013-04-02T17:59:31.407 に答える