gpt4 book ai didi

c# - 用 mono.cecil 或 postsharp 替换属性构造函数参数

转载 作者:行者123 更新时间:2023-11-30 17:00:35 25 4
gpt4 key购买 nike

我有一个示例方法定义:

[FooAttribute("One","time")]
public void Bar(){}

是否可以通过上述技术之一将参数“一”更改为“二”?

最佳答案

假设有以下属性和类:

public class MyAttribute : Attribute
{
public MyAttribute(string a, string b)
{
this.a = a;
this.b = b;
}
private string a,b;
}

[My("foo", "bar")]
class WithAttribute
{
}

您可以使用类似于以下的一些代码(请记住,此代码仅用于演示目的,它假设了很多事情并且根本不进行任何错误处理)

var assembly = AssemblyDefinition.ReadAssembly(assemblyPath);
var type = assembly.MainModule.Types.Where(t => t.Name.Contains("WithAttribute")).Single();

var attr = type.CustomAttributes.Where(ca => ca.AttributeType.FullName.Contains("MyAttribute")).Single();

type.CustomAttributes.Remove(attr);

var newAttr = new CustomAttribute(attr.Constructor)
{
ConstructorArguments =
{
new CustomAttributeArgument(
attr.ConstructorArguments[0].Type,
attr.ConstructorArguments[0].Value + "-Appended"),

new CustomAttributeArgument(
attr.ConstructorArguments[1].Type,
attr.ConstructorArguments[1].Value)
}
};

type.CustomAttributes.Add(newAttr);

assembly.Write(path);

关于c# - 用 mono.cecil 或 postsharp 替换属性构造函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22008110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com