2016-08-03 25 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

相关问题