我编写了一个代码,该代码应在使用System.Reflection.Emit的运行时生成以下代码:
[DefiniteAttribute]
internal class GeneratedClass
{
}
我的实际代码是:
public class DefiniteAttribute : Attribute
{
}
var assemblyName = new AssemblyName("GeneratedAssembly");
var assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName(assemblyName.Name), AssemblyBuilderAccess.Run);
var moduleBuilder = assemblyBuilder.DefineDynamicModule("GeneratedModule");
var typeBuilder = moduleBuilder.DefineType("GeneratedClass",
TypeAttributes.Public
| TypeAttributes.Class
| TypeAttributes.AutoClass
| TypeAttributes.AnsiClass
| TypeAttributes.BeforeFieldInit
| TypeAttributes.AutoLayout, null);
var constructorInfo = typeof(DefiniteAttribute).GetConstructor(new Type[0]);
var customAttributeBuilder = new CustomAttributeBuilder(constructorInfo, new object[0]);
typeBuilder.SetCustomAttribute(customAttributeBuilder);
Type generatedType = typeBuilder.CreateType();
var definiteAttribute = (DefiniteAttribute) generatedType.GetCustomAttribute(typeof(DefiniteAttribute), false);
Class GeneratedClass生成良好。我想从生成的类中获取属性DefiniteAttribute。但是我失败了,变量definiteAttribute是null
请告诉我,如何编写代码以从类型中获取内部属性?
事实证明,如果我将inherit参数设置为true,则方法GetCustomAttribute返回内部属性。
var definiteAttribute = generatedType.GetCustomAttribute<DefiniteAttribute>(inherit: true);
尽管the documentation仅表示
inherit: true to inspect the ancestors of element; otherwise, false.