タイプがインターフェイスのセットの1つを実装しているかどうかをテストします。C#:オブジェクトがインターフェイスのリストのいずれかを実装しているかどうかをテストしますか?
ViewData["IsInTheSet"] =
model.ImplementsAny<IInterface1, IInterface2, IInterface3, IInterface4>();
これを処理するために、以下の拡張メソッドを記述しました。
次のコードを書くために、より拡張性の高い方法がありますか?ジェネリックを活用しながら新しい方法を書く必要がない方がいいです
public static bool Implements<T>(this object obj)
{
Check.Argument.IsNotNull(obj, "obj");
return (obj is T);
}
public static bool ImplementsAny<T>(this object obj)
{
return obj.Implements<T>();
}
public static bool ImplementsAny<T,V>(this object obj)
{
if (Implements<T>(obj))
return true;
if (Implements<V>(obj))
return true;
return false;
}
public static bool ImplementsAny<T,V,W>(this object obj)
{
if (Implements<T>(obj))
return true;
if (Implements<V>(obj))
return true;
if (Implements<W>(obj))
return true;
return false;
}
public static bool ImplementsAny<T, V, W, X>(this object obj)
{
if (Implements<T>(obj))
return true;
if (Implements<V>(obj))
return true;
if (Implements<W>(obj))
return true;
if (Implements<X>(obj))
return true;
return false;
}
これはおそらくhttp://s.tk/reviewのより良い質問です。 –
'type'オブジェクトを' typeof(InterfaceN) 'で保存し、' obj.GetType() 'を使ってそのように関係を判断しますか? –