我正在创建一个代码修复程序来改变这个:
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) 对于本地声明,例如:string a = string.Empty;
如何编写诊断程序以将其更改为:var a = string.Empty;