2011-01-31 16 views
26

カスタム属性を持つアセンブリ内のすべての型を取得するためのエレガントな方法はありますか?カスタム属性を持つアセンブリですべての型を取得

だから私は、クラスを持っている場合、私は私がそれを行うことができます

Assembly.GetTypesによって返された型のコレクション(...)でそれを見つけることができるようにしたいと思い

[Findable] 
public class MyFindableClass 
{} 

大きな悪質なハックだが、誰かがより良い方法を持っていると確信している。

+2

私はあなたが「大きな悪質なハック」を考えているのかどうかはわかりませんが、単純なループの場合はハックではありません。それは良い解決策です。 –

+0

[C# - カスタムクラス属性を持つすべてのクラスを列挙する方法は?](http://stackoverflow.com/questions/607178/c-sharp-how-enumerate-all-classes-with-custom-class-attribute) – nawfal

+0

重要な当然の質問実行時にクラスの属性を読み取るにはどうすればよいですか? http://stackoverflow.com/questions/2656189/how-do-i-read-an-attribute-on-a-class-at-runtime –

答えて

45

私はあなたが、アセンブリ内のすべての種類を列挙属性のチェックをかわすことができるとは思わないだろうが、あなたが理解するために、クエリやすくするためにLINQを使用することができます。

Assembly assembly = ... 
var types = from type in assembly.GetTypes() 
      where Attribute.IsDefined(type, typeof(FindableAttribute)) 
      select type; 

EDIT:にMemberInfo.GetCustomAttributesから移動は、Marc Gravellの提案に基づいています。

+3

厳密に言えば、Attribute.IsDefined(type、attribType)はここでより効率的です –

+1

@Marc:それを編集すればいいの? – Ani

+0

それに行きましょう。 –

関連する問題