gpt4 book ai didi

c# - Roslyn 的 CompilationUnitSyntax.ReplaceNode 中的歧义

转载 作者:太空狗 更新时间:2023-10-29 23:07:45 26 4
gpt4 key购买 nike

我正在尝试使用 Roslyn 替换类的 CompilationUnitSyntax。

但是,我使用的 ReplaceNode 与 Roslyn 常见问题解答和我查看过的任何 StackOverflow 问题中的 ReplaceNode 具有不同的签名。任何人都可以指出这是为什么,我如何使用 ReplaceNodeold ClassDeclarationSyntaxnew ClassDeclarationSyntax 作为参数?

我正在查看 9 月 CTP 常见问题解答¹,方法:

    [FAQ(26)]
public void AddMethodToClass()

特别是下面一行:

        CompilationUnitSyntax newCompilationUnit =
compilationUnit.ReplaceNode(classDeclaration, newClassDeclaration);

当我尝试构建此代码时,出现错误,因为 ReplaceNode 需要不同的参数:

 'Roslyn.Compilers.CSharp.CompilationUnitSyntax' does not contain a definition for 'ReplaceNode' and the best extension method overload
'Roslyn.Compilers.CSharp.SyntaxExtensions.ReplaceNode<TRoot>(TRoot,
Roslyn.Compilers.CSharp.SyntaxNode,
Roslyn.Compilers.SyntaxRemoveOptions,
System.Func<Roslyn.Compilers.CSharp.SyntaxNode,Roslyn.Compilers.CSharp.SyntaxTriviaList>,
System.Func<Roslyn.Compilers.CSharp.SyntaxNode,Roslyn.Compilers.CSharp.SyntaxTriviaList>)'

¹ 我相当确定我使用的是 9 月 CTP:

我使用的常见问题解答来自 %userprofile%\Documents\Microsoft Roslyn CTP - September 2012\CSharp\APISampleUnitTestsCS\FAQ.cs

NuGet 说我的 Roslyn 包的版本是 1.2.20906.2

最佳答案

ReplaceNode()有两个重载(都是扩展方法):

  1. public static TRoot ReplaceNode<TRoot, TNode>(
    this TRoot root, TNode oldNode, TNode newNode)
    where TRoot : CommonSyntaxNode where TNode : CommonSyntaxNode;

    Roslyn.Compilers.CommonSyntaxNodeExtensions 中。

  2. public static TRoot ReplaceNode<TRoot>(
    this TRoot root, SyntaxNode node, SyntaxRemoveOptions options,
    Func<SyntaxNode, SyntaxTriviaList> keepLeadingTrivia = null,
    Func<SyntaxNode, SyntaxTriviaList> keepTrailingTrivia = null)
    where TRoot : SyntaxNode

    Roslyn.Compilers.CSharp.SyntaxExtensions 中。

您想要第一个,但错误消息谈到了第二个,这表明您缺少 using Roslyn.Compilers;

关于c# - Roslyn 的 CompilationUnitSyntax.ReplaceNode 中的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21948634/

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