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 GetAssemblies
yöntemi üzerinde AppDomain
mevcut uygulama etki alanı için örneğin.
Oradan , derlemede bulunan türleri almak için GetExportedTypes
(yalnızca genel türler istiyorsanız) veya GetTypes
her Assembly
birini ararsınız.
Ardından, bulmak istediğiniz özniteliğin türünü ileterek her örnekte GetCustomAttributes
uzantı 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 Assembly
uygulamak 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>() };