C#如何确定类型是否实现给定的接口?

Cri*_*scu 4 .net reflection inheritance

我希望以下内容返回true:

var isIt = IsDisposable(typeof(TextWriter));
Run Code Online (Sandbox Code Playgroud)

哪里:

bool IsIDisposable(Type t){
    ??? 
    // I tried:
    //return t.IsSubclassOf(typeof(IDisposable)); //returns false
    // the other t.IsXXX methods don't fit the requirement as far as I can tell
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 12

您可以使用 IsAssignableFrom

bool IsDisposable = typeof(IDisposable).IsAssignableFrom(typeof(TextWriter));
Run Code Online (Sandbox Code Playgroud)

DEMO


Cri*_*scu 5

我找到了:Type.GetInterfaces()是我所需要的:

bool IsIDisposable(Type t){
    return t.GetInterfaces().Contains(typeof(IDisposable));
}
Run Code Online (Sandbox Code Playgroud)

从文档中Type.GetInterfaces()返回:

类型:System.Type []
Type对象的数组,表示当前Type 实现或继承的所有接口。