1. ホーム
  2. c#

[解決済み] 汎用メソッド多重(OR)型制約

2022-04-25 07:28:16

質問内容

読書 これ ジェネリックメソッドにすることで、複数の型のパラメータを受け取れるようになることを知りました。この例では、以下のコードに型制約を付けて、"U" が IEnumerable<T> .

public T DoSomething<U, T>(U arg) where U : IEnumerable<T>
{
    return arg.First();
}

さらに、複数の型制約を追加できるような、次のようなコードを見つけました。

public void test<T>(string a, T arg) where T: ParentClass, ChildClass 
{
    //do something
}

しかし、このコードは、以下のことを強制しているように見えます。 arg の両方のタイプでなければなりません。 ParentClass ChildClass 私がやりたいことは、argは一種の可能性があるということです。 ParentClass または ChildClass を、以下のように設定します。

public void test<T>(string a, T arg) where T: string OR Exception
{
//do something
}

いつもながら、ご協力をお願いします。

どのように解決するのですか?

ただし、特定の型に対してオーバーロードを定義することは可能です。

public void test(string a, string arg);
public void test(string a, Exception arg);

それらがジェネリッククラスの一部である場合、そのメソッドのジェネリックバージョンよりも優先されます。