获得AppDomain中所有类型标记特定属性的最有效方法是使用反射。以下是一个简单的示例,展示了如何使用反射获取AppDomain中所有类型的特定属性:
using System;
using System.Collections.Generic;
using System.Reflection;
public class CustomAttribute : Attribute
{
public string Name { get; set; }
}
[CustomAttribute(Name = "Class1")]
public class Class1
{
}
[CustomAttribute(Name = "Class2")]
public class Class2
{
}
public static class ReflectionHelper
{
public static List<Type> GetTypesWithCustomAttribute(AppDomain appDomain)
{
List<Type> typesWithCustomAttribute = new List<Type>();
foreach (Type type in appDomain.GetAssemblies())
{
foreach (TypeInfo typeInfo in type.DefinedTypes)
{
if (typeInfo.GetCustomAttribute<CustomAttribute>() != null)
{
typesWithCustomAttribute.Add(typeInfo.AsType());
}
}
}
return typesWithCustomAttribute;
}
}
在这个示例中,我们定义了一个名为CustomAttribute
的自定义属性,并在两个类中使用了这个属性。然后,我们创建了一个名为ReflectionHelper
的静态类,其中包含一个名为GetTypesWithCustomAttribute
的静态方法。这个方法接受一个AppDomain
参数,并返回一个包含所有具有CustomAttribute
属性的类型的列表。
在GetTypesWithCustomAttribute
方法中,我们使用appDomain.GetAssemblies()
方法获取AppDomain中的所有程序集。然后,我们遍历每个程序集中的所有类型,并使用typeInfo.GetCustomAttribute<CustomAttribute>()
方法检查类型是否具有CustomAttribute
属性。如果类型具有CustomAttribute
属性,我们将其添加到typesWithCustomAttribute
列表中。
最后,我们返回typesWithCustomAttribute
列表,其中包含了所有具有CustomAttribute
属性的类型。这是获得AppDomain中所有类型标记特定属性的最有效方法。
领取专属 10元无门槛券
手把手带您无忧上云