2016-08-03 34 views
-1

verwendet wird, ich bin mit VS2015 auf Windows 7.Visual Studio-Code-Analyse - ca1804 ausgelöst, wenn Variable

-Code Analyseregel ca1804 (http://msdn.microsoft.com/library/ms182278.aspx) besagt, dass ich nicht eine Variable verwende und es zu entfernen. Allerdings verwende ich diese Variable weiter unten in meinem Code. Dies geschieht über die gesamte Lösung in Hunderten von Orten. Der Codeblock sieht wie folgt aus:

[WebMethod] 
public bool ValidateUser(string userName, string password) 
{ 
    string soapResult = String.Empty; 
    try 
    { 
     // code here 
     using (StreamReader rd = new StreamReader(responseStream)) 
     { 
      soapResult = rd.ReadToEnd(); 
     } 
     // code here 
     bool isValidated = true; 
    } 
    catch (Exception e) 
    { 
     // throw error 
    } 

    return isValidated; 
} 

Ich erhalte diesen Fehler von Code-Analyse:

Fehler ca1804 'ValidateUser (string, string)' deklariert eine Variable, 'soapResult' vom Typ ' string ', die nie verwendet oder nur zugewiesen wird. Verwenden Sie diese Variable oder entfernen Sie sie.

Gibt es etwas, das mir hier fehlt? Es ist nicht in einem If/Else wie einige der Instanzen, die ich diesen Fehler bekomme. Aber ich dachte mir, wenn er überhaupt benutzt wird, würde dieser Fehler nicht ausgelöst werden.

Danke für jede Hilfe.

+1

Ich bin verwirrt, wie das überhaupt funktioniert. Wie geschrieben, ist "isValidated" nicht einmal im Umfang, wenn Sie versuchen, es zurückzugeben. – EJoshuaS

Antwort

1

Lesen Sie die Analyse Nachricht sorgfältig beachten, das Bit I hervorgehoben haben:

Fehler ca1804 'ValidateUser (string, string)' deklariert eine Variable, 'soapResult' vom Typ 'string', die nie ist verwendet oder ist nur zugeordnet. Verwenden Sie diese Variable oder entfernen Sie sie.

Es wird Ihnen sagen, dass Sie nur einen Wert zuweisen (Sie tatsächlich tun, dass zweimal einschließlich der Initialisierung string.Empty), aber sie nie den Wert verwenden. Es ist also effektiv eine Verschwendung von Variablen.

Was Sie tun sollten, ist entweder den Wert mit, zum Beispiel:

soapResult = rd.ReadToEnd(); 
if(soapResult.Contains("something") 
{ 
    isValidated = true; 
} 
else 
{ 
    //Not needed but added it to better show how this works in context 
    isValidated = false; 
} 

oder ganz entfernen und entsorgen Sie das Ergebnis, das Sie aus der StreamReader erhalten:

rd.ReadToEnd(); 
+0

Die "if" -Anweisung ist hier nicht notwendig. "isValidated" ist genau dann wahr, wenn "soapResults.Contains (" etwas ") wahr ist und genau dann falsch ist, wenn diese Aussage falsch ist - Sie können einfach eine direkte Zuweisung machen. Damit ist dies jedoch definitiv die richtige Antwort - die Variable wird zugewiesen, aber nie benutzt. – EJoshuaS

+0

@EJoshuaS Ich weiß, dass es nur ein Beispielcode ist, um zu zeigen, was ich hier erkläre. – DavidG

+0

Schön genug, nur darauf hinweisend. Ihre Antwort ist übrigens gut, ich habe sie upgestimmt. – EJoshuaS