如何从类型获取内部属性?

问题描述 投票:0回答:1

我编写了一个代码,该代码应在使用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。但是我失败了,变量definiteAttributenull

请告诉我,如何编写代码以从类型中获取内部属性?

c# reflection .net-core reflection.emit
1个回答
0
投票

事实证明,如果我将inherit参数设置为true,则方法GetCustomAttribute返回内部属性。

var definiteAttribute =  generatedType.GetCustomAttribute<DefiniteAttribute>(inherit: true);

尽管the documentation仅表示

inherit: true to inspect the ancestors of element; otherwise, false.
© www.soinside.com 2019 - 2024. All rights reserved.