为什么IDE会向我显示一条消息:“在进行一次foreach之后,空语句是多余的?

时间:2019-04-30 08:06:17

标签: c# visual-studio

我的应用程序中包含以下代码:

protected async override void OnAppearing()
{
    base.OnAppearing();
    Subscribe();
    cardSetPhrases = App.DB.GetPhrasesForCardSet(cardSetId);
    var num = 1;
    foreach (var x in cardSetPhrases) { x.Row = num++; };
    await CreateListSectionAsync();
}

IDE在这里给我一条消息:

my

5 个答案:

答案 0 :(得分:3)

isActive = true 关闭

foreach循环,然后启动下一条语句(从编译器的角度来看)。并立即与您的}

关闭

单个;被称为空语句,当编译器需要具有一条语句(内部循环或if / else等)但您在那里不需要任何实际操作时,该实用程序很有用。 / p>

来自docs

  

空语句由一个分号组成。它什么也不做,可以在需要执行语句但不需要执行任何操作的地方使用。

这就是为什么您收到有关“空声明”而不是“多余分号”的警告的原因。因为您将空语句放在不需要和不使用的地方。

答案 1 :(得分:1)

如果您这样编写foreach语句,也许它变得更清楚了,为什么您最后不需要额外的分号:

foreach (var x in cardSetPhrases)
{
    x.Row = num++;
} // <-- no semicolon, because the { } make a complete block of statements.

答案 2 :(得分:0)

在foreach循环后不需要分号,因此没有任何终止要求。 这就是为什么它是多余的。

答案 3 :(得分:0)

因为您不需要使用分号来结束foreach循环(这不是它们的语法),所以它认为您只是使用;和空位(因为foreach用}(花括号)关闭。

foreach循环,即使它们可以单行编写,也通常以多行格式设置,例如:

foreach (var x in cardSetPhrases) 
{
    x.Row = num++;
}

如果您想进一步了解它们的功能,请查看以下内容:

dotnetperlsdocs.microsoftgeeksforgeeks

答案 4 :(得分:0)

在封闭块支架后移出分号。 而且,如果您想在forforeachif等语句中写一条语句,则可以删除方括号,如下所示:

foreach (var x in cardSetPhrases) x.Row = num++;