你这里还是用了FieldInfo 的SetCustomAttribute方法,但是FieldInfo中是没有SetCustomAttribute方法的
时间: 2024-01-22 11:03:54 浏览: 190
HCloner.zip
非常抱歉,我的回答还是有误。`FieldInfo` 类确实没有 `SetCustomAttribute` 方法。
正确的做法是使用 `CustomAttributeBuilder` 类来构造自定义 Attribute,并使用 `AttributeBuilder` 类的 `SetCustomAttribute` 方法将其添加到字段上。以下是示例代码:
```csharp
using System;
using System.Reflection;
using System.Reflection.Emit;
public class MyClass
{
[MyCustom("This is a custom attribute")]
public int MyField;
}
[AttributeUsage(AttributeTargets.Field)]
public class MyCustomAttribute : Attribute
{
public string Description { get; set; }
public MyCustomAttribute(string description)
{
Description = description;
}
}
class Program
{
static void Main(string[] args)
{
Type myType = typeof(MyClass);
FieldInfo myField = myType.GetField("MyField");
ConstructorInfo constructor = typeof(MyCustomAttribute).GetConstructor(new[] { typeof(string) });
object[] constructorArgs = new object[] { "This is a custom attribute" };
CustomAttributeBuilder attributeBuilder = new CustomAttributeBuilder(constructor, constructorArgs);
myField.SetCustomAttribute(attributeBuilder);
}
}
```
这样,指定的字段就会被添加上自定义的 Attribute。请注意,Attribute 的使用需要遵循一定的规范,否则可能不会生效。
阅读全文