可能错误的空语句警告

时间:2015-11-13 04:16:00

标签: c#

我是编码的新手,我一整天都在警告 “如果(Jtag.activeConnection);” 它给了我“可能错误的空洞陈述”。 它不影响我的节目,但我见过的每一个视频都没有得到警告,我想清除它。 以下是我的代码

public partial class Form1 : MetroFramework.Forms.MetroForm
{
    XRPC Jtag = new XRPC();
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {
        Jtag.Connect();
        if (Jtag.activeConnection) ;
    }
}

4 个答案:

答案 0 :(得分:4)

好吧,你的if语句是空的

if (Jtag.activeConnection) ;

因此,编译器会要求您确认这是否真的是您想要做的。

通常情况应该是

if (Jtag.activeConnection)
{
  // do something
}

答案 1 :(得分:1)

您收到编译器警告(CS0642

因为......

  

条件语句后面的分号可能导致代码执行与预期不同

这是一个警告,您可以通过编译器选项,编译指示指令来抑制它,或者通过提供一个块来运行条件语句来纠正它。

我推荐梯子;这是看起来如何:

Jtag.Connect();
if (Jtag.activeConnection) 
{
    // by virtue of having the blocks, and removing the semi-colon.. the warning goes away.
}

答案 2 :(得分:0)

这是因为您的语句末尾有 ;。所以删除它。

答案 3 :(得分:-2)

这个问题的两半似乎仍然没有答案。

1)我不知道他为什么要这样做:

if (Jtag.activeConnection) {}

也许他只是想要评估那个表达(因为它的副作用)。如果是这样,我希望他可以这样做:

Jtag.activeConnection;

或者,如果这不起作用,他可以满足于这样做:

bool dummy = Jtag.activeConnection;

(尽管其中一个或两个都可能引发有关未使用结果的警告。)

2)关于"可能错误的空白陈述"警告:也许他更喜欢使用if为其;分支设置样式。有时我也可能会;超过{ },例如:

if (expression)
    ;
else
    ;
根据MSDN C#语言规范,这似乎是合法的。它汇编。但是使用空表达式作为if-或else-branch会引发编译器警告:"可能出错的空语句" (CS0642)。 (这是糟糕的风格,因为单独的;是模棱两可的。)(可悲的是,没有明确的,明确的noop;陈述。)

我认为没有[聪明的]方法可以使警告消失,仅仅是那些线路。某些IDE具有针对不需要的警告的紧凑单实例覆盖(嵌入在同一行末尾的注释文本中)。 VS2005 - VS2015仅提供我可以使用#pragma warning disable 0642#pragma warning restore 0642包围违规行,这太难看了。 (我也拒绝在整个程序中使用#pragma或编译选项 - 它风险太大。我想单独抑制每个特定的警告。)(( C ++ 提供#pragma warning suppress,它只抑制了一次指定的错误(在下一行),只添加了一条丑陋的行.C#必须决定永远不执行它。))

如果我以这种方式设计它(即使它什么也不做),VS不会反对,但我不是也喜欢。 (它太高了。)

if (expression)
{
}
else
{
}

我也不想这样说。 (它很紧凑,但标准的自动漂亮打印不会将{ }缩进到;所在的位置,即使我认为它应该。)

if (expression)
{ }
else
{ }