c# - C# 中的空 "if"语句是否会导致错误或警告?

标签 c# .net c#-3.0 c#-4.0 c#-2.0

让我从一个现实生活中的例子开始:

Customer: Alex, just noticed something strange in the RemovalProcessor at line 138:

if (Session.Handler.ExecutePrefetchTasks()==null); 
  Session.ExecuteDelayedQueries(); 

Should the semicolumn behind the 'if' be there?

Me: Oops... I'll send this to our guys to check, but most likely, you're right.

虽然这种情况很少见,但我承认几乎所有大项目都有类似的问题。

我知道 C# 中的分号(和语句 block )使用规则无法更改(我个人更喜欢 Python 风格)。但我认为用 if 语句识别正是这种情况并将其归类为错误或警告是个好主意。

我想到的几个问题:

  • 为什么在这种情况下会产生警告或错误?

    因为这是开发人员的错误,而且有 99% 的可能性。

  • 为什么在这种情况下错误更可取?

    在许多情况下,开发人员会忽略警告。

    我明白这是他们自己的问题,还有/warnaserror (威胁警告作为错误)切换,但由于这是一个错误 很有可能,而且,如果这不是错误(真的吗?;)), 解决这个问题很容易,可能最好对这种情况进行分类 作为一个错误。

    最后,这种情况下的错误不会“限制”开发人员, 因为这样的代码可以(而且很可能必须)总是被重写 没有 if 语句。

  • 为什么在这种情况下警告更可取?

    这不会破坏兼容性;我也怀疑一些代码生成器 可能会根据当前行为生成代码。

所以我很高兴听到您对此的看法。

最佳答案

它已经产生了一个警告:

Possible mistaken empty statement

我同意你的看法,错误会更可取(如果你真的想要一个空语句,总是可以将它写成 { },这样更明确)——但他们不会以这种方式更改 C# 语言。这将是一个突破性的变化,我怀疑他们(阅读:Eric Lippert 的)的理由是“ yield 不会超过成本”。

关于c# - C# 中的空 "if"语句是否会导致错误或警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3544776/

相关文章:

c# - 如何在列表框上实现增量搜索?

c# - 为 Winforms 应用程序添加命令行支持

C# 自动属性

c# - 具有可动态切换数据类型的文本框的 MVC 4 客户端验证

c# - 将 hashtable.Keys 转换为 List<int> 或其他 IEnumerable<int>

c# - 在设置先决条件导入之前无法调用 GetExportedValue

.net - Windows设备仿真器V3,Windows 7 +网络

c# - C# 4 的协变是否支持泛型的嵌套?

winforms - 将 DataGridViewComboBoxCell 的数据源动态设置为基于其他单元格选择的过滤数据 View

c# - 有限状态机应该有一个 "nested"有限状态机吗?