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へのリンクを提供するならそれは素晴らしいでしょう(しかし私はそれが修正されるかもしれないと思います)。

手伝ってくれてありがとう!

4

1 に答える 1

2

現在ロードされているアセンブリのみを検索します。

[参照の追加]ダイアログは常に表示されますが、次の質問を確認することをお勧めします:使用可能なすべての.NETアセンブリを一覧表示します

ジェネリックインターフェイスでこれを行う方法がわかりませんでした(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でタイプの完全修飾名を使用してWeb検索を実行するものを作成してみてください。タイプをMSDNページにマップするメタデータがあるかどうか、またはそれを実現するためのクリーンな方法があるかどうかはわかりません。

于 2011-03-22T22:07:45.677 に答える