Я создаю Code Fix, который меняет это:
if(obj is MyClass)
{
var castedObj = obj as MyClass;
}
в это:
var castedObj = obj as MyClass;
if(castedObj != null)
{
}
Это означает, что я должен сделать 3 вещи:
- Измените условие в инструкции
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);