【问题标题】:What is the use of an empty statement [duplicate]空语句有什么用[重复]
【发布时间】:2017-05-22 13:18:56
【问题描述】:

我在 C# 教科书中看到过这个空语句示例。

代码:

public void empty()
{
  ;  
}

一些快速的谷歌搜索发现这是一个多余的功能,我看不到它的用途,因为它似乎毫无意义?

我很想知道它什么时候有用,即使它已经过时了,它是否仍然可以使用?

【问题讨论】:

  • 可能只是作为方法存根(签名)或用于单元测试
  • 如果您在教科书中找到它,就会有它出现在那里的背景 - 为什么不与我们分享这个背景?
  • 也许你有一个 while 循环,一旦满足条件就会中断,你想做的就是等待。那么empty(); 可能比; 更好
  • @PaulF:是的,这是一个空语句(仅限分号),但 OP 将其包装在一个方法中。他在问这种方法是否有意义。但是文档也提到了用例,所以这个链接很有帮助。

标签: c#


【解决方案1】:

在给定的示例中,它是毫无意义的和/或装饰性的。

空语句在需要语句但您无事可做的地方“有用”,例如

 while (condition_with_side_effects) ;

由于需要副作用,这与大多数编码指南或最佳实践不符。

认为它是 C 的剩余部分。

【讨论】:

  • 谢谢,这很有意义,我想我应该能够弄清楚,因为它实际上是一个非常简单的概念。我假设大多数开发人员只是将语句留空而不是使用分号?
  • condition_with_side_effects 你不需要副作用...对外部事件进行糟糕的轮询就足够了。
  • @benbants 使用空语句的原因有很多,而不仅仅是建议的while ()。并非所有这些都是隐含的“坏习惯”(您需要一一分析)。但它们都可能非常罕见。例如while (!File.Exists("SomeFile")) ; 几乎可以接受。外部事件是文件的创建。您不能以任何其他方式执行此代码。我可能会把它写成while (...) { Thread.Sleep(100) },但这就是会做的:-)
  • @benbants 如果没有Thread.Sleep(...),程序会不断地轮询操作系统是否存在文件。这对 PC 来说非常耗时。对于Thread.Sleep(...),检查之间会有 100 毫秒(0.1 秒)的“暂停”。 100ms 是我选择的一个随机数,必须选择以平衡对外部事件的响应需求和不做无用工作的需求(不断检查文件的存在)
  • 几乎可以接受 - 你不能认真。你永远不应该把这样的线程绑起来。并且任何形式的改进(布尔标志、CancellationToken)都会消除空语句。
猜你喜欢
  • 2011-09-21
  • 2020-06-27
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
相关资源
最近更新 更多