在CodeFixProvider中,我需要删除包装if-condition(例如):
if (temp == null)
{
temp = new Temp();
}
我想只留下调整后的内在表达:
// I want to change the inner expression as well
temp = anotherTemp()
一旦我尝试用行符号语句替换'if-block'的节点,就会抛出'无法强制转换'异常。 你知道这样做的正确方法吗?
答案 0 :(得分:0)
我发现的唯一解决方案是在if-condition块之前插入调整后的内部表达式,然后删除该块。 要成功地做到这一点,你必须跟踪父块节点,否则它将无法工作。
IfStatementSyntax originalIfStatement = parentIfStatement;
root = root.TrackNodes(originalParentIfStatement);
parentIfStatement = root.GetCurrentNode(originalParentIfStatement);
root = root.InsertNodesBefore(parentIfStatement, new[] { SyntaxFactory.ExpressionStatement(newExpression) });
parentIfStatement = root.GetCurrentNode(originalParentIfStatement);
root = root.RemoveNode(parentIfStatement, SyntaxRemoveOptions.KeepNoTrivia);
如果有任何错误,请告诉我。