如何断言一个类具有继承属性,但同时排除父类?

时间:2010-06-02 08:00:18

标签: c# reflection attributes

我有两个属性 - MigrationAttributeTestDataMigrationAttribute : MigrationAttribute。我如何断言某个类已应用TestDataMigrationAttribute 但不是 MigrationAttribute(这是父属性类)?

2 个答案:

答案 0 :(得分:0)

如果您要查看TestDataMigrationAttribute,请确保在使用Type.GetCustomAttributes()时指定其显式类型:

typeof(MyClass).GetCustomAttributes(typeof(TestDataMigrationAttribute));

GetCustomAttributes返回指定属性类型的属性或从中派生的属性。如果使用派生属性的类型(TestDataMigrationAttribute),则不会找到基本属性(MigrationAttribute)。如果使用base属性的类型,则可以找到这两个属性。

以上示例仅在类上标记[TestDataMigration]时返回属性,而不是[Migration]在类上。

如果您需要检查可以在类上定义两个属性的情况,但是您只需要只有[TestDataMigration]的类,那么您必须检查基本属性类型并分析生成数组,或进行两次检查 - 每种属性类型一次。

答案 1 :(得分:0)

  object[] attributes = typeof(MyTestClass).GetCustomAttributes(typeof(MigrationAttribute), true);
  Assert.IsNotNull(attributes);
  Assert.IsTrue(attributes.Any(x => x is TestDataMigrationAttribute));
  Assert.IsFalse(attributes.Any(x => x is MigrationAttribute && !(x is TestDataMigrationAttribute)));

(假设您可以在类上定义两个属性)