0

CodeFixProvider では、ラッピングする if-condition (たとえば) を削除する必要があります。

if (temp == null)
{
    temp = new Temp();  
}

そして、調整された内部表現のみを残したい:

// I want to change the inner expression as well
temp = anotherTemp()

「if-block」のノードを line-line ステートメントに置き換えようとするとすぐに、「キャストできません」という例外がスローされます。あなたはそれを行う適切な方法を知っていますか?

4

1 に答える 1

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);

誰かが間違いを見つけたら、教えてください。

于 2016-03-18T07:51:17.510 に答える