【问题标题】:Control flow not getting into variable declaration控制流没有进入变量声明
【发布时间】:2016-04-12 06:13:25
【问题描述】:

对于我的任务,我只是更新了 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' 已分配,但它的值从未使用过

对于其他一些变量,我也看到了此警告消息,但它们只能正常工作。 任何有关这方面的建议都会非常有帮助。

【问题讨论】:

  • ExistingAcout 在哪里声明? BTW 应该是 ExistingAccount。如果代码没有到达您的变量声明,那么它可能正在退出或在您标记为“一些代码在此处”的部分中出现异常
  • 这里的ExistingAccout 是什么..?
  • 现有帐户,这意味着已经是一个获得许可的帐户。
  • 你能显示// some code goes here的代码吗?
  • 在显示的 sn-p 中,警告是正确的,并且可能解释了问题:enableNewWelcomeMail 已设置但从未读取 - 即没有意义设置它,因为您从未在任何地方使用它...是 @ 987654325@你添加的新标志?

标签: c# variables declaration


【解决方案1】:

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

  1. 优化和清理您的代码以删除未使用的代码
  2. 发现错误。想象一下,您实际上想使用初始值但忘记这样做了。在这种情况下,警告将表明出现问题。

您为从未使用过的变量分配了一个值。看下面的例子:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    enableNewWelcomeMail 将始终为 false,这就是您的 if 条件。警告说明了这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-29
      • 1970-01-01
      • 2012-10-27
      • 2018-12-09
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多