2011-03-22 58 views
3

有時我想找出一個實現特定接口的所有標準.NET類型的列表。通常它是出於好奇,有時也有一些實際的目的(但這不是重點)。如何找到基類庫中實現特定接口的類型列表?

我試圖從MSDN中得到這個,但類型的頁面只包含類型的鏈接子類,而不是類型實現接口。

你知道有什麼訣竅如何做到這一點(或有幫助的工具)嗎?

我寫了這個代碼(ICollection是被調查的類型):

 var result = 
      from assembly in AppDomain.CurrentDomain.GetAssemblies().ToList() 
      from type in assembly.GetTypes() 
      where typeof(ICollection).IsAssignableFrom(type) 
      select type; 

     foreach (var type in result) 
     { 
      Console.Out.WriteLine(type.FullName); 
     } 

但是這有一定的侷限性:

  1. 它目前只搜索加載的程序集。
  2. 我找不出一種方法來爲通用接口(ICollection<>不起作用)做到這一點。
  3. 這將是很好,如果它提供了MSDN的鏈接(但我認爲可以修復)。

感謝您的幫助!

+0

我認爲反射器有這樣的內置。檢查「使用者」分析功能。不確定Reflector是否仍然可用。我認爲他們想取消免費版本。 – CodesInChaos 2011-03-22 22:23:54

回答

2

它只搜索當前加載的 程序集。

總是有「添加引用」對話框,但你可能想看看這個問題:List all available .NET assemblies

我不能想出一個辦法做到這一點 的通用接口(ICollection的<> 是行不通的)

試試這個查詢,而不是:

from assembly in AppDomain.CurrentDomain.GetAssemblies() 
from type in assembly.GetTypes() 
where type.GetInterfaces() 
      .Any(i => i.IsGenericType 
       && i.GetGenericTypeDefinition() == typeof(ICollection<>)) 
select type; 

這將是很好,如果它提供了鏈接 MSDN。

.NET Reflector支持搜索實現一個接口(選擇類型下的「派生類型」),以及在搜索類型爲MSDN文檔(在類型單擊鼠標右鍵,選擇「搜索MSDN」)類型。

如果您不喜歡該選項,那麼當然可以嘗試編寫一些在MSDN上運行網絡搜索的類型的全限定名稱。我不知道是否有任何元數據將類型映射到它的MSDN頁面或完成該操作的乾淨方式。

相關問題