Mam następujący kod, który ma nie generuje ostrzeżenie CA1804 (zadeklarowana zmienna nigdy nie jest używana) z analizy kodu (VS2010 Premium):Analiza kodu nie wyświetla ostrzeżenia CA1804 pomimo nieużywanej lokalnej zmiennej łańcuchowej w C# (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);
}
...
Kiedy usunąć ErrorProvider.SetError (...) linie, ostrzeżenie CA1804 jest pokazany, ale dlaczego nie jest to w przypadku próbki kodu powyżej?
(BTW: Sam kod nie jest zbyt wielki i właśnie pokazano, aby zilustrować moje pytanie.)
Jakieś pomysły co może być przyczyną takiego zachowania? Myślę, że to może być w dół na fakt, że kod IL jest zoptymalizowany w taki sposób, że stawia deklarację poza jeżeli, co z kolei oznaczałoby, że ostrzeżenie powinno rzeczywiście nie pokazać się na przykład jak ten powyżej, ale Nie jestem pewien, czy to prawda.
góry dzięki
G.
Prawdopodobnie przesuwa 'ciąg errorText = ...' 'if' zewnątrz i nie zauważysz różnicy między tymi dwoma jednakowo nazwanych zmiennych. Czy nadal kończy się niepowodzeniem, gdy zmieniasz pierwszy "errorText" na "errorText2"? – Polynomial