0

.Netリフレクションに問題があります。この概念は私にとってはかなり新しいものであり、何が機能し、何が機能しないかを確認するために、いくつかのテストケースでそれを調査しています。タイプの属性をスキャンして、メニューのセットを動的に設定する例を作成しています。

基本的に、「SomeAttribute」を宣言するメインの名前空間内のすべてのタイプを検索したいと思います(それが何であるかは関係ありません。現在、メンバーはありません)。私がやったことは:

    For Each itemtype As Type In Reflection.Assembly.GetExecutingAssembly().GetTypes
        If itemtype.IsDefined(Type.GetType("SomeAttribute"), False) Then
            'do something with the type
        End If
    Next

これにより、起動時にアプリケーションがクラッシュします。最初に識別されるタイプはMyApplicationですが、これは明らかに私が望んでいるものではありません。現在のアセンブリ内ですべての「実際の」「賢明な」タイプ(つまり、私が定義したクラス)を探すための適切で適切な方法はありますか?

4

2 に答える 2

1

少しLinqはどうですか

var list =  AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes()).
                        Where(x => x.GetCustomAttributes(typeof(MyAttribute), false).Length > 0);
于 2010-04-10T10:43:35.277 に答える
1

nullを返すIsDefined()ため、失敗する可能性が最も高くなります。Type.GetType("SomeAttribute")属性名に名前空間を追加してみてください。

Type.GetType("SomeNamespace.SomeAttribute")
于 2010-04-10T10:43:56.353 に答える