2011-12-16 8 views
1

これについては既にいくつか質問がありますが、これを動作させることはできません。クラスがジェネリックインターフェイスを継承するかどうかのテスト

私はこのようなクラスを持っています。

public class TopLocation<T> : ILocation 
{ 
    public string name { get; set; } 
    public string address { get; set; } 
} 

私はそれがIRestaurantIClubのかどうかを指定したクラスを作成します。これまでのところ問題ありません。

ifの文でIClubまたはIRestaurantのいずれであるかをテストするにはどうすればよいですか?

これは失敗します。

if (item.trendItem is ILocation<ITopRestaurant>) 

、これはnullを返します、それはMVCアプリケーションでASCXページ内に座っていますし、私は正しい部分をレンダリングしようとしていますので、私はif声明でこれをたい理由がある

   Type myInterfaceType = item.trendItem.GetType().GetInterface(
        typeof(ITopRestaurant).Name); 

ビュー。

編集コメントに応じて

public interface ITopClub{} 
public interface ITopRestaurant { } 
public interface ILocation{} 
+1

は、一般的な 'ILocation'はありますが同じように?階層は何ですか? ITOPRestaurantとは何ですか? – Jon

+0

ITopRestauntは、単純に、このアイテムのタイプを識別するために使用される空のインターフェイスです – griegs

+0

可能な複製http://stackoverflow.com/questions/503263/how-to-determine-if-a-type-implements-a-specific -generic-interface-type – HackedByChinese

答えて

2

あなたは、単にこれを行うことができます。

if (item.trendItem is TopLocation<IRestaurant>) 
+0

実際、はい、まさに私が探していたものです。ありがとう – griegs

1

まず、ILocationはそうILocation<T>に対して何をテストしようとすると失敗しようとしている一般的なインタフェースではありません。あなたのクラスはGeneric Typeです。

次に、Generic Typeの汎用引数として使用されている型が特定のインタフェースであるかどうかを調べようとしています。これを行うには、次のタイプのためにジェネリック型引数を取得し、その型に対してチェックを実行する必要があります。

var myInterfaceType = item.trendItem.GetType().GetGenericTypeArguments()[0]; 

if(myInterfaceType == typeof(ITopRestaurant)) 
{ 

} 
+0

ブリリアント。ありがとう@JustinNiessner。非常にうまく動作します。 – griegs

関連する問題