2016-08-03 14 views
-1

Я использую VS2015 на Windows 7.Visual Studio Code Analysis - CA1804 генерируется, когда переменная используется

правило анализа кода CA1804 (http://msdn.microsoft.com/library/ms182278.aspx) говорится, что я не использую переменную и удалить его. Однако я использую эту переменную ниже в моем коде. Это происходит во всем решении в сотнях мест. Блок кода выглядит следующим образом:

[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; 
} 

Я получаю эту ошибку из анализа кода:

Ошибка CA1804 «ValidateUser (строка, строка)» объявляет переменную, «soapResult», типа ' string ', который никогда не используется или назначается только. Используйте эту переменную или удалите ее.

Что-то я здесь не хватает? Это не входит в if/else, как в некоторых случаях, когда я получаю эту ошибку. Но я подумал, что если его вообще используют, эта ошибка не будет выбрана.

Спасибо за любую помощь.

+1

Я запутался, как это даже компилируется. Как написано, «isValidated» даже не отображается, когда вы пытаетесь его вернуть. – EJoshuaS

ответ

1

Прочитайте сообщение анализа тщательно, отметим немного я выделил:

Ошибка CA1804 «ValidateUser (строка, строка)» объявляет переменную «soapResult», типа «строка», которая никогда не бывает использовано или относится только к. Используйте эту переменную или удалите ее.

Это говорит вам, что вы только присвоить ему значение (вы на самом деле сделать это дважды, включая инициализацию к string.Empty), но вы никогда не использовать значение. Таким образом, это фактически пустая трата переменной.

То, что вы должны делать это либо с использованием значения, например:

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; 
} 

Или удалить его полностью и отбрасывать результат вы получите от StreamReader:

rd.ReadToEnd(); 
+0

Операция «if» здесь не нужна. «isValidated» истинно точно, когда «soapResults.Contains (« something ») истинно и неверно, когда этот оператор является ложным - вы можете просто выполнить прямое присвоение. Тем не менее, это, безусловно, правильный ответ - переменная присваивается, но никогда не используется. – EJoshuaS

+0

@EJoshuaS Я знаю, что это просто пример кода, чтобы показать, что я объясняю. – DavidG

+0

Достаточно справедливо, просто указывая на это. Ваш ответ хорош, кстати, я поддержал. – EJoshuaS