2011-01-31 24 views
26
ile uyumlu hale getirme

Özel bir özniteliği olan bir derlemede tüm türleri elde etmenin zarif bir yolu var mı?Tüm özniteliği

Bu yüzden bir sınıf varsa ben bunu yapabilirim

Assembly.GetTypes tarafından döndürülen türde bir koleksiyon (...) bunu bulmak mümkün olmak istiyorum

[Findable] 
public class MyFindableClass 
{} 

Büyük bir aşağılık hack, ama eminim ki birisi daha güzel bir yol var.

+2

"Büyük bir iğrenç hack" ne düşündüğünüzden emin değilim, ancak bu basit bir döngü ise, bir kesmek değil; bu iyi bir çözüm. –

+0

[C# - özel sınıf özniteliğiyle tüm sınıfları nasıl sıralarsınız?] Olası bir kopyası (http://stackoverflow.com/questions/607178/c-sharp-how-enumerate-all-classes-with-custom-class-attribute) – nawfal

+0

Önemli sonuç sorusu Çalışma zamanında bir sınıftaki bir özniteliği nasıl okurum? http://stackoverflow.com/questions/2656189/how-do-i-read-an-attribute-on-a-class-at-runtime –

cevap

45

Sana, montaj her tür numaralandırma özellik için kontrol Dodge düşünüyorum olmaz, ama anlamak sorgu kolaylaştırmak için LINQ kullanabilirsiniz:

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

DÜZENLEME: için MemberInfo.GetCustomAttributes taşındı Marc Gravell'in önerisine göre Attribute.IsDefined.

+3

Kesinlikle, Attribute.IsDefined (type, attribType) burada daha verimli olurdu –

+1

@Marc: Bunu düzenlerseniz harika olur mu? – Ani

+0

Bunun için git - elbette. –