相关疑难解决方法(0)

如何通过添加和删除从旧根检索到的节点来创建新根?

我正在创建一个代码修复程序来改变这个:

if(obj is MyClass)
{
    var castedObj = obj as MyClass;
}
Run Code Online (Sandbox Code Playgroud)

进入这个:

var castedObj = obj as MyClass;
if(castedObj != null)
{
}
Run Code Online (Sandbox Code Playgroud)

这意味着我必须做三件事:

  • 更改if语句中的条件.
  • 将演员移到if声明正上方.
  • 删除正文中的语句.

到目前为止,我所有的尝试都让我陷入困境,最多可以使这两件事情发挥作用.

我相信会出现此问题,因为您在同一级别上基本上有2个语法节点.因此,对其中一个进行更改会使另一个的位置无效.或类似的东西.简而言之:我要么设法在if语句之外复制变量赋值,要么我设法更改条件+删除变量赋值.绝不是全部3.

我该如何解决这个问题?

为了更好地衡量,这是我的代码,它更改条件并删除赋值:

var newIfStatement = ifStatement.RemoveNode(
                                   variableDeclaration,
                                   SyntaxRemoveOptions.KeepExteriorTrivia);
newIfStatement = newIfStatement.ReplaceNode(newIfStatement.Condition, newCondition);

var ifParent = ifStatement.Parent;
var newParent = ifParent.ReplaceNode(ifStatement, newIfStatement);
newParent = newParent.InsertNodesBefore(
                           newIfStatement, 
                           new[] { variableDeclaration })
                           .WithAdditionalAnnotations(Formatter.Annotation);

var newRoot = root.ReplaceNode(ifParent, newParent);
Run Code Online (Sandbox Code Playgroud)

c# roslyn

12
推荐指数
1
解决办法
1178
查看次数

如何用Roslyn中的var替换字符串变量?

对于本地声明,例如:string a = string.Empty;

如何编写诊断程序以将其更改为:var a = string.Empty;

c# diagnostics roslyn

5
推荐指数
2
解决办法
1080
查看次数

标签 统计

c# ×2

roslyn ×2

diagnostics ×1