gpt4 book ai didi

c# - 如何将 IMethodSymbol 转换为 MethodDeclarationSyntax?

转载 作者:行者123 更新时间:2023-12-05 03:49:36 25 4
gpt4 key购买 nike

给定一个 IMethodSymbol 我如何创建一个 MethodDeclarationSyntax

背景:

为了修复代码,我将方法从一个实现接口(interface)的类复制到另一个实现不同接口(interface)的类。

因此,我需要对复制的方法进行一些修改(参数、 namespace 等)。我想修改 IMethodSymbol,将符号转换为 MethodDeclarationSyntax,然后将符号添加到新类中。

我已经能够通过使用 DeclaringSyntaxReferences 属性来做到这一点,但是当原始类驻留在 nuget 包中时这不起作用。

使用 DeclaringSyntaxReferences(以及我自己的一些代码)我能够执行以下操作:

public static MethodDeclarationSyntax[] ToMethodDeclarationSyntax(this IMethodSymbol methodSymbol)
{
var namespaceValue = methodSymbol.ContainingNamespace.GetNameSpaceIdentifier();
var syntaxReference = methodSymbol.DeclaringSyntaxReferences;
var syntaxNodes = syntaxReference.Select(syntaxRef => syntaxRef.GetSyntax());
var methodNodes = syntaxNodes.OfType<MethodDeclarationSyntax>();
var methodExpression = methodSymbol.CreateExpressionSyntax();
return methodNodes
.Select(mds => mds
.WithExpressionBody(methodExpression)
.WithReturnType(SyntaxFactory.QualifiedName(namespaceValue, SyntaxFactory.IdentifierName(mds.ReturnType.ToString())))
.WithParameterList(methodSymbol.GetFullyQualifiedParameterListSyntax())
)
.ToArray();
}

有没有一种方法可以在不使用 DeclaringSyntaxReferences 的情况下从 IMethodSymbol 生成 MethodDeclarationSyntax?

谢谢!

最佳答案

使用SyntaxGenerator.MethodDeclaration它需要一个 IMethodSymbol。您可能根本不想使用 DeclaringSyntaxReferences,因为它仅在您的符号直接来自源代码的情况下才真正有用。

关于c# - 如何将 IMethodSymbol 转换为 MethodDeclarationSyntax?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63853896/

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