Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在一次单击中重命名多个变量_C#_Rename_Roslyn - Fatal编程技术网

C# 在一次单击中重命名多个变量

C# 在一次单击中重命名多个变量,c#,rename,roslyn,C#,Rename,Roslyn,我做了一个代码修复程序,如果一个变量的名称不符合某些规则,它将重命名该变量。 例如,“int”变量需要以“i”开头。我制作了这个代码修复程序,它可以工作: public async Task<IEnumerable<CodeAction>> GetFixesAsync(Document document, TextSpan span, IEnumerable<Diagnostic> diagnostics, CancellationToken cancell

我做了一个代码修复程序,如果一个变量的名称不符合某些规则,它将重命名该变量。 例如,“int”变量需要以“i”开头。我制作了这个代码修复程序,它可以工作:

public async Task<IEnumerable<CodeAction>> GetFixesAsync(Document document, TextSpan 
span, IEnumerable<Diagnostic> diagnostics, CancellationToken cancellationToken)
{
  var root = await document.GetSyntaxRootAsync(cancellationToken); 
  var token = root.FindToken(span.Start); 
  var node = root.FindNode(span);

  if (node.IsKind(SyntaxKind.VariableDeclarator))
  {
     if (node.Parent.Parent is LocalDeclarationStatementSyntax)
     {
       var Verify = (LocalDeclarationStatementSyntax)node.Parent.Parent;
       var Verify2 = (VariableDeclarationSyntax)node.Parent;
       if (!Verify.Modifiers.Any(SyntaxKind.ConstKeyword))
       {
          if (Verify2.Type.ToString() == "int")
          {
            if (token.IsKind(SyntaxKind.IdentifierToken))
            {
                var variable = (VariableDeclaratorSyntax)node;
                string newName = variable.Identifier.ValueText;
                if (newName.Length > 1)
                {
                  newName = char.ToUpper(newName[0]) + newName.Substring(1);
                }
                var leading = variable.Identifier.LeadingTrivia;
                var trailing = variable.Identifier.TrailingTrivia;

                VariableDeclaratorSyntax newVariable = variable.WithIdentifier(SyntaxFactory.Identifier(leading, "i" + newName, trailing));
                var newRoot = root.ReplaceNode(variable, newVariable);
                return new[] { CodeAction.Create("Add 'i'", document.WithSyntaxRoot(newRoot)) };

                 }
               }
          }
      }
  }

   return null;
 }
我有一个警告和一种方法可以在一次单击中重命名声明。因此,代码更改如下:

 int iVariable = 0;
 variable++;
但是所有名为“variable”的变量都不会重命名!VisualStudio已经有了一个代码修复程序来重命名其他被称为“variable”的变量,但它需要用户进行第二次操作

你知道我如何实现一个直接重命名所有变量的代码吗?
如果没有,是否有办法调用Visual Studio提供的代码修复?

您正在寻找Roslyn的语义重命名引擎


打电话。

(评论一下匈牙利符号在地狱里会死多少)。这个问题似乎处理了一个类似的问题(重命名常量),所以交叉引用它可能是有用的(我个人不认为它的接近程度足以被认为是重复的)。我知道匈牙利符号不是很好,但我必须做这项工作。。关于“重命名一个常量”,我写了这篇文章,现在已经解决了。问题不一样,我不是在研究如何重命名,而是如何在同一时刻更改多个名称。匈牙利符号必须在地狱中消亡和腐烂…工作正常,谢谢!注意:它帮助我:
 int iVariable = 0;
 variable++;