我正在编写一个程序,它使用反射来检查程序集中的枚举类型,在某些情况下,还会重写定义这些枚举的C#源文件。
有问题的源文件是一种严格规定的格式,它基本上只是定义枚举,可能是在分部类中,所以创建一个简单的生成器并不太难。
不幸的是,当枚举上有自定义属性时,情况会有点复杂,在此应用程序中通常会有自定义属性。
我可以使用反射来获取Attribute或CustomAttributeData对象的列表。现在,我正在使用一种特别的方法,它假设找到的特定属性并在此基础上为它们生成C#代码,但我更喜欢更通用的方法。
给定一个属性,如果假设该属性没有参数是安全的,我可以确定类型并简单地输出如下代码:
[SomeNamespace.SomeAttribute]不幸的是,假设没有参数存在是不安全的,即使有参数,生成所需代码也不是那么简单。
在给定我们想要复制的属性调用的情况下,.NET或其他地方是否有一些现有的机制可以在一般情况下为属性生成C#代码?我检查了属性和CustomAttributeData类,但它们中的任何内容似乎都不能自动处理此问题。
发布于 2013-03-13 21:34:23
您可以使用Type.GetCustomAttributesData。这不是提供构造的Attribute实例,而是提供一个CustomAttributesData对象,该对象具有对构造函数、构造函数参数和命名参数的单独访问权限,您需要将该属性作为源代码重新生成。
https://stackoverflow.com/questions/15386644
复制相似问题