2011-05-09 20 views
8

Bir web formu projeleri için özel bir özellik doğrulaması oluşturmaya çalışıyorum.PropertyInfo - GetProperties öznitelikleriyle

Zaten tüm özellikleri sınıfımdan alabilirim, ancak şimdi bunları nasıl filtreleyeceğimi bilmiyorum ve yalnızca bazı özelliklere sahip özellikleri ediniyorum. Örneğin

:

PropertyInfo[] fields = myClass.GetType().GetProperties(); 

Bu bana tüm özellikleri dönecektir. Ancak, "testAttribute" gibi bir özelliği kullanarak özellikleri nasıl iade edebilirim?

Zaten bunu araştırmıştım ama bunu çözmeye çalışırken birkaç kez denemeye karar verdim.

cevap

1

Muhtemelen MemberInfo için GetCustomAttributes yöntemini istiyorsunuz.

foreach (var propInfo in fields) { 
    if (propInfo.GetCustomAttributes(typeof(TestAttribute), false).Count() > 0) { 
     // Do some stuff... 
    }  
} 

Ya da tüm bunları almak gerekiyorsa: Eğer TestAttribute, diyelim için özel arıyorsanız, kullanabileceğiniz

var testAttributes = fields.Where(x => x.GetCustomAttributes(typeof(TestAttribute), false).Count() > 0); 
+1

Count()> 0 –

23

kullanın Attribute.IsDefined:

PropertyInfo[] fields = myClass.GetType().GetProperties() 
    .Where(x => Attribute.IsDefined(x, typeof(TestAttribute), false)) 
    .ToArray(); 
+0

yerine Any() öğesini kullanın. Bu daha iyi bir yanıttır: sadece bir varlık kontrolüne ihtiyacımız olduğunda saymaya gerek yoktur. – Askolein

2

yapabilirsiniz kullanmak

.Any() 

ve ifade basitleştirir

fields.Where(x => x.GetCustomAttributes(typeof(TestAttribute), false).Any()) 
İlgili konular