2008-09-19 63 views

回答

11

如果你只是想看看一個類型是否實現了給定的接口,或者沒問題,儘管GetInterface()可能會更快,因爲IsAssignableFrom()比GetInterface()做更多的內部檢查。它可能會更快地檢查Type.GetInterfaces()的結果,該結果返回相同的內部列表,以至於無論如何都使用其他方法。

1

內部類的處理方式有所不同。看看下面的類:

public interface IFoo 
{ 
}  

internal class Foo: IFoo 
{ 
} 

這會給你一個項目的列表:

var types = typeof(IFoo).Assembly.GetTypes() 
      .Where(x => x.GetInterface(typeof(IFoo).FullName) != null) 
      .ToList(); 

而這會給你一個空列表:

var types = typeof(IFoo).Assembly.GetTypes() 
      .Where(x => x.IsAssignableFrom(typeof(IFoo)) 
      .ToList();