Анализ кода не показывает предупреждение CA1804, несмотря на неиспользуемую локальную строковую переменную в C # (VS2010 Premium)

У меня есть следующий код, который не выдает предупреждение CA1804 (объявленная переменная никогда не используется) из анализа кода (VS2010 Premium):

...
if( boolVariable )
{
    string errorText = "Bla Bla Bla"; // Never used
    ErrorProvider.SetError( SomeControl, "Some Warning" );
}
else
{
    string errorText = "Acme Acme Acme"; // Used below
    ErrorProvider.SetError( SomeControl, errorText );
}
...

Когда я удаляю строки ErrorProvider.SetError (...) , отображается предупреждение CA1804, но почему это не так в примере кода выше?

(Кстати: сам код не слишком хорош и показан только для иллюстрации моего вопроса.)

Есть идеи, что может вызывать такое поведение? Я предполагаю, что это может быть связано с тем, что код IL оптимизирован таким образом, что объявление помещается за пределы if , что, в свою очередь, означало бы, что предупреждение действительно не должно отображаться в примере, таком как один выше, но я не уверен, правда ли это.

Заранее спасибо

G.

5
задан Gorgsenegger 21 November 2011 в 13:25
поделиться