Вот в таком незамысловатом коде
private void HandleRetrieveVirtualItem2(object sender, RetrieveVirtualItemEventArgs e)
{
e.Item = new ListViewItem("foo");
e.Item.Tag = "bar";
}
Если на выделенном сделать Introduce variable
и заменить все его два вхождения получим
private void HandleRetrieveVirtualItem2(object sender, RetrieveVirtualItemEventArgs e)
{
ListViewItem item = e.Item;
e.Item = new ListViewItem("foo");
item.Tag = "bar";
}
Что без вариантов приведёт нас к NullReferenceException.
Пожалуйста, учитывайте, что если в target для Introduce variable что-то положили, то это уже совсем другой объект.
... << RSDN@Home 1.2.0 alpha rev. 788>>
Introduce variable для левой части присваивания можно рассматривать исключительно как контекстный экшен, который только заводит новую переменную и присваивает ей значение. К сожалению, ничего более вразумительного придумать не получается.
PS Introduce variable во многих случаях ломает семантику, но такова его природа)
Здравствуйте, Serjic, Вы писали:
S>Introduce variable для левой части присваивания можно рассматривать исключительно как контекстный экшен, который только заводит новую переменную и присваивает ей значение. К сожалению, ничего более вразумительного придумать не получается.
Почему не получается? Я же пишу русскими буквами: после того как в
левую часть что-то положили, нужно либо заново инициализировать переменную (что будет выглядеть ужасно но работать правильно) либо просто останавливаться. Т.е. контекст для Introduce variable должен быть от забора и до того места, как поменяется левая часть.
... << RSDN@Home 1.2.0 alpha rev. 788>>