2

SO で同様の質問の回答を見たことがありますが、以下のすべての基準に対応する回答は見つかりませんでした。

B が A から継承するときに、クラス B が次の基準を満たしているかどうかを判断するにはどうすればよいですか。

  • [B]インターフェイスを実装していません[additional](ジェネリックかどうかに関係なく)。
  • [A]ジェネリック パラメータとして独自の型を持つジェネリック インターフェイスを実装しますか?

以下

object o = new SomeObject();
bool result = (o.GetType().GetInterfaces()[0] == typeof(IKnownInterface<???>));
// ??? should be typeof(o). How to achieve this?

のようなタイプからインターフェイス名の文字列を取得できることはわかっています"NameSpace.ClassName+IKnownInterface'1[[SomeType, ModuleName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"が、これは直感的でも安全でもないようです。さらに、'1表記は、そのインターフェイスに使用されるジェネリック型の数に基づいて増加します。

私はこれを間違った方法で行っているか、ここで何かばかげたことを見逃しています。お知らせ下さい。

4

2 に答える 2

1

試す:

 o.GetType().GetInterfaces()[0] == 
                   typeof(IKnownInterface<>).MakeGenericType(o.GetType())

http://msdn.microsoft.com/en-us/library/system.type.makegenerictype.aspx

于 2013-05-13T17:55:14.303 に答える