为通过反射找到的属性重新生成c#代码的简单方法



我正在编写一个程序,它使用反射来检查程序集中的枚举类型,并且在某些情况下,重写定义这些枚举的c#源文件。

所讨论的源文件具有严格规定的格式,基本上只是定义了枚举,可能在部分类中,因此创建一个简单的生成器并不太难。

不幸的是,当枚举上有自定义属性时,情况会稍微复杂一些,在这个应用程序中通常会有自定义属性。

我可以使用反射来获得Attribute或CustomAttributeData对象的列表。现在我正在使用一种特殊的方法,它假设找到的特定属性的事情,并在此基础上为它们生成c#代码,但我更喜欢一种更通用的方法。

给定一个属性,如果可以安全地假设该属性没有参数,则可以确定其类型并输出如下代码:

[SomeNamespace.SomeAttribute]

不幸的是,假设没有参数是不安全的,如果有,生成所需的代码就不那么简单了。

在。net或其他地方是否有一些现有的机制,可以在一般情况下为属性生成c#代码,给定我们想要复制的属性调用?我检查了Attribute和CustomAttributeData类,但它们似乎没有自动处理这个

您可以使用Type.GetCustomAttributesData。这将为您提供一个CustomAttributesData对象,而不是为您提供一个构造的Attribute实例,它可以单独访问构造函数、构造函数参数和命名参数,您需要将该属性复制为源代码。

最新更新