2016-04-17 5 views
1
public class TestBase 
{ 
    // implementation 
} 
public class Test : ICollection<TestBase> 
{ 
    // implementation 
} 

どこかで私がテストタイプのプロパティを持っている:ジェネリックインターフェイスの基本的な種類を取得するには?他

public Test Test {get;set;} 

は、どのように私はテストが継承するICollectionをの基になる型を得ることができますか?

+0

あなたの質問は本当に明確にする必要があります。 'Test'は何も継承しないので、' ICollection 'を実装しています。あなたはあなたが考えるように見えることはできませんメソッドから取得するために期待するものの種類を知らせる試してみてください:それは 'TestBase'または' ICollection'のですか?そこすでに答えの両方を提供している、と私はあなたがおそらく 'TestBase'をしたいと思うが、それははっきりしていない... –

答えて

3

GetGenericArguments()です。

var type = typeof(Test); 
var collInterface = type.GetInterfaces()[0]; 
var generic = collInterface.GetGenericArguments()[0]; 
+0

は、それはそれだった、ありがとうございます。 – Alex

0

はXインタフェースを実装するクラスのインスタンスとします。

var type = x.GetType(); 
var interfaces = type.GetInterfaces(); 

編集:私はあなたの質問が間違っていた:提案として「GetGenericArguments()」とフォローアップを次のようにして、そのiterfaceの種類を取得することができます。

-1
Type t = typeof(Test); 
MethodInfo mi = t.GetMethod("MyMethod"); 
Type returnvalue = mi.ReturnType; 
Type answer = Nullable.GetUnderlyingType(returnvalue); 

私はそれが役に立ちそうです。あなたはおそらく探しているものを

0

GetInterfaces方法は、現在の型とジェネリック引数のそのGetGenericArgumentsメソッドが返すリストのすべての実装されたインタフェースは、あなたがBaseTypeプロパティによって、その基本型を取得することができ魔女返します。 この例現在のクラスに実装基本インタフェース のジェネリック引数のクラス階層を戻します。。。。

VAR MYTYPE = this.GetType()GetInterfacesメソッド()最初()GetGenericArguments()最初(); ながら(!MYTYPE = NULL)
{
Console.WriteLineを(myType.Name)。
MYTYPE = myType.BaseType。