控制流程没有进入变量声明

时间:2016-04-12 06:13:25

标签: c# variables declaration

对于我的任务,我只是更新cs文件中的现有功能,还有一个新标志来监控发送邮件功能。 当前功能是,

public static string EditDetails(AccountDetails Account, string[] existingAccount)
{
    // some code goes here

    var enableNewWelcomeMail = true; // control not getting here..
    var isAccountUpdated = true;
    var isMailSent = true;

    if (Account.ContractType == ContractType.Licensed) // even though condition true value is not assigned to false
    {
        enableNewWelcomeMail = false;
    }
    // remaining code goes here
}

添加新标志变量后,我清理了项目并构建了它。即使是现在控件也只是跳过变量声明。在清理和构建项目时,我注意到一条警告消息

  

警告CS0219:已分配变量'enableNewWelcomeMail',但从未使用其值

对于其他一些变量,我也看到了这个警告信息,但这些只是正常工作。 任何关于此的建议都会非常有用。

2 个答案:

答案 0 :(得分:2)

首先,警告意味着它所说的内容。它是静态代码分析的一部分,可以通过两种方式帮助您进行编码:

  1. 优化并清理代码,删除未使用的代码
  2. 发现错误。想象一下,你实际上想要使用初始值,但忘了这么做。在这种情况下,警告将指示出现问题。
  3. 您为从未使用过的变量赋值。请看以下示例:

    var valueUnused = false;
    valueUnused = true;
    valueUnused = false;
    

    您会看到三个分配,但在覆盖之前不会使用其中的两个值。如果您在某处使用带有if (valueUnused)块的值,则警告将消失。你甚至可以这样做:

    var valueUnused = false;
    valueUnused = !valueUnused;
    valueUnused = !valueUnused;
    

    对于控制流程,我的猜测是你正在为Release构建,优化器会出于上述原因为你删除所有这些代码。

答案 1 :(得分:1)

首先,当编译器发现对变量的第二次赋值总是覆盖第一次赋值(通过静态代码分析)时,抛出这种类型的警告。

这意味着你的if语句总是正确的。

这就是你警告的原因。这并不意味着你的想法。

if (Account.ContractType == ContractType.Licensed) 
// your if-condition is always true, that is why this warning is displayed
{
    enableNewWelcomeMail = false;
}

enableNewWelcomeMail将始终为false,例如if-condition。这就是警告澄清的内容。