2016-08-03 26 views
-1

我使用的是Windows 7的Visual Studio代碼分析 - 當變量正在使用

VS2015代碼分析規則CA1804(http://msdn.microsoft.com/library/ms182278.aspx)指出,我沒有使用一個變量,將其刪除CA1804拋出。但是,我在代碼中進一步使用了這個變量。這在整個解決方案中發生在數百個地方。代碼塊看起來是這樣的:

[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」,類型爲「字符串',這是從來沒有使用或只分配給。使用此變量或將其刪除。

有什麼我在這裏失蹤?它不在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」語句是不必要的。當「soapResults.Contains(」something「)爲true時,」isValidated「是正確的,當該語句爲false時,該值爲false - 您可以直接進行分配。但是,這肯定是正確答案 - 變量被賦值但從未使用 – EJoshuaS

+0

@EJoshuaS我知道,這只是示例代碼來展示我的解釋。 – DavidG

+0

夠公平的,只是指出了這一點,你的回答很好,我贊成 – EJoshuaS

相關問題