Пример кода, который получает все сериализуемые типы в сборке:
public IEnumerable<Type> GetTypesWithAttribute(Assembly assembly)
{
return assembly.GetTypes()
.Where(type => type.IsDefined(typeof(SerializableAttribute), false));
}
Второй аргумент IsDefined()
- это то, должен ли атрибут быть просмотрен также и для базовых типов.
Пример использования, который находит все типы, украшенные MyDecorationAttribute
:
public class MyDecorationAttribute : Attribute{}
[MyDecoration]
public class MyDecoratedClass{}
[TestFixture]
public class DecorationTests
{
[Test]
public void FindDecoratedClass()
{
var currentAssembly = Assembly.GetExecutingAssembly();
var typesWithAttribute = GetTypesWithAttribute(currentAssembly);
Assert.That(typesWithAttribute,
Is.EquivalentTo(new[] {typeof(MyDecoratedClass)}));
}
public IEnumerable<Type> GetTypesWithAttribute(Assembly assembly)
{
return assembly.GetTypes()
.Where(type => type.IsDefined(typeof(MyDecorationAttribute), false));
}
}