2010-08-26 21 views
6

Bu özelliğe verilen bir değere göre özel bir nitelikle etiketlenmiş bir sınıf bulmak mümkün mü?Belirli bir özellik değeri içeren bir özelliğe sahip tüm sınıfları bul

[MyAttr("CODE")] 
public class MyClass() {} 

Oradan alıyorum bütün sınıfları (Türleri) - -

var c = Assembly.GetExecutingAssembly().GetTypes().Where 
         (
          t => t.IsClass && 
          t.Namespace == (typeof(AbstractParentClass)).Namespace && 
          t.IsSubclassOf(typeof(AbstractParentClass)) 
         ); 

tüm görünür Bu çalışmaya

Temelde, şuna benzer sınıfları var. c, tüm uygun sınıfları içerir. Şimdi, MyAttr özniteliğine ve "CODE" değerine sahip olan c sınıfını almam gerekiyor. Değer, Id adlı MyAttr üzerindeki bir özellik aracılığıyla kullanılabilir.

var message = from m in c 
        from a in m.GetCustomAttributes(typeof(MyAttr), false) 
        where ((MyAttr)a).Id == "CODE" 
       select m; 

hile yapmadım -

Bu

benim girişimiydi. Öyleyse, asıl soru, eğer bu mümkün ise ve eğer uygunsa, uygun sınıfı elde etmek için neyin değişmesi gerekiyorsa (ve onu örneklendirirse).

+2

Sizin kodunuz çalışmalıdır. Aradığınız türden c'nin bulunduğundan emin misiniz? – SLaks

+1

SLaks doğru ve kod çalışmalıdır. Assembly.GetExecutingAssembly() her zaman beklediğiniz derleme dönüyorsa merak ediyorum? –

+1

'Assembly.GetExecutingAssembly()' türünü 'typeof (AbstractParentClass) .Assembly' ile değiştirmeyi deneyin. – SLaks

cevap

3

Assembly.GetExecutingAssembly()'u typeof(AbstractParentClass).Assembly ile değiştirin.

İlgili konular