Geçerli uygulama etki alanına yüklenen tüm derlemelerdeki tüm sınıfları numaralandırmanız gerekir. Bunu yapmak için, çağırır GetAssembliesyöntemi üzerinde AppDomainmevcut uygulama etki alanı için örneğin.
Oradan , derlemede bulunan türleri almak için GetExportedTypes(yalnızca genel türler istiyorsanız) veya GetTypesher Assemblybirini ararsınız.
Ardından, bulmak istediğiniz özniteliğin türünü ileterek her örnekte GetCustomAttributesuzantı yöntemini çağırırsınız Type.
Bunu sizin için basitleştirmek için LINQ kullanabilirsiniz:
var typesWithMyAttribute =
from a in AppDomain.CurrentDomain.GetAssemblies()
from t in a.GetTypes()
let attributes = t.GetCustomAttributes(typeof(HelpAttribute), true)
where attributes != null && attributes.Length > 0
select new { Type = t, Attributes = attributes.Cast<HelpAttribute>() };
Yukarıdaki sorgu, kendinize atanan özniteliklerin yanı sıra, özniteliğinizin kendisine uygulandığı her türü alır.
Uygulama alanınıza çok sayıda derleme yüklüyse, bu işlemin pahalı olabileceğini unutmayın. Operasyon süresini azaltmak için Paralel LINQ kullanabilirsiniz , örneğin:
var typesWithMyAttribute =
// Note the AsParallel here, this will parallelize everything after.
from a in AppDomain.CurrentDomain.GetAssemblies().AsParallel()
from t in a.GetTypes()
let attributes = t.GetCustomAttributes(typeof(HelpAttribute), true)
where attributes != null && attributes.Length > 0
select new { Type = t, Attributes = attributes.Cast<HelpAttribute>() };
Belirli bir öğeye filtre Assemblyuygulamak basittir:
Assembly assembly = ...;
var typesWithMyAttribute =
from t in assembly.GetTypes()
let attributes = t.GetCustomAttributes(typeof(HelpAttribute), true)
where attributes != null && attributes.Length > 0
select new { Type = t, Attributes = attributes.Cast<HelpAttribute>() };
Derlemede çok sayıda tür varsa, Paralel LINQ'yu tekrar kullanabilirsiniz:
Assembly assembly = ...;
var typesWithMyAttribute =
// Partition on the type list initially.
from t in assembly.GetTypes().AsParallel()
let attributes = t.GetCustomAttributes(typeof(HelpAttribute), true)
where attributes != null && attributes.Length > 0
select new { Type = t, Attributes = attributes.Cast<HelpAttribute>() };