我正在编写一个程序,它使用反射来检查程序集中的枚举类型,并且在某些情况下,重写定义这些枚举的c#源文件。
所讨论的源文件具有严格规定的格式,基本上只是定义了枚举,可能在部分类中,因此创建一个简单的生成器并不太难。
不幸的是,当枚举上有自定义属性时,情况会稍微复杂一些,在这个应用程序中通常会有自定义属性。
我可以使用反射来获得Attribute或CustomAttributeData对象的列表。现在我正在使用一种特殊的方法,它假设找到的特定属性的事情,并在此基础上为它们生成c#代码,但我更喜欢一种更通用的方法。
给定一个属性,如果可以安全地假设该属性没有参数,则可以确定其类型并输出如下代码:
[SomeNamespace.SomeAttribute]
不幸的是,假设没有参数是不安全的,如果有,生成所需的代码就不那么简单了。
在。net或其他地方是否有一些现有的机制,可以在一般情况下为属性生成c#代码,给定我们想要复制的属性调用?我检查了Attribute和CustomAttributeData类,但它们似乎没有自动处理这个
您可以使用Type.GetCustomAttributesData
。这将为您提供一个CustomAttributesData
对象,而不是为您提供一个构造的Attribute
实例,它可以单独访问构造函数、构造函数参数和命名参数,您需要将该属性复制为源代码。