gpt4 book ai didi

c# - 如何在C#中使用反射获取方法的所有属性和属性数据

转载 作者:行者123 更新时间:2023-11-30 14:53:24 27 4
gpt4 key购买 nike

最终目标是“按原样”将属性从一个方法复制到生成的类中的另一个方法。

public class MyOriginalClass
{
[Attribute1]
[Attribute2("value of attribute 2")]
void MyMethod(){}
}

public class MyGeneratedClass
{
[Attribute1]
[Attribute2("value of attribute 2")]
void MyGeneratedMethod(){}
}

我可以使用 MethodInfo.GetCustomAttributes() 列出方法的属性,但是,这并没有给我属性参数;我需要在生成的类上生成相应的属性。

请注意,我不知道属性的类型(无法转换属性)。

我正在使用 CodeDom 生成代码。

最佳答案

MethodInfo.GetCustomAttributesData() 具有所需的信息:

// method is the MethodInfo reference
// member is CodeMemberMethod (CodeDom) used to generate the output method;
foreach (CustomAttributeData attributeData in method.GetCustomAttributesData())
{
var arguments = new List<CodeAttributeArgument>();
foreach (var argument in attributeData.ConstructorArguments)
{
arguments.Add(new CodeAttributeArgument(new CodeSnippetExpression(argument.ToString())));
}

if (attributeData.NamedArguments != null)
foreach (var argument in attributeData.NamedArguments)
{
arguments.Add(new CodeAttributeArgument(new CodeSnippetExpression(argument.ToString())));
}

member.CustomAttributes.Add(new CodeAttributeDeclaration(new CodeTypeReference(attributeData.AttributeType), arguments.ToArray()));
}

关于c# - 如何在C#中使用反射获取方法的所有属性和属性数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29269268/

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