【发布时间】:2013-08-14 13:31:45
【问题描述】:
编辑:我更改了大部分问题,因为它太长了,尽管我的问题是对事实的要求,但它被认为是基于意见的。话虽如此,请阅读我所在的 cmets尝试解释为什么关闭这个问题是错误的恕我直言。
另外:我想为我最初的问题道歉,我不是以英语为母语的人,我不知道 [blindly] 这个词有如此负面的语气。我实际上在其他问题中使用了这个词。
背景:
考虑以下一段 C# 代码:
for(; /*empty condition*/ ;)
{
//Infinite loop
}
在其他方法中,这种方法被认为是进行无限循环的好习惯。但是,当我们尝试使用 while loop 的类似方法时,它永远不会编译:
while(/*empty condition*/)
{
//Compiler error
}
起初我认为这是我的编译器中的某种错误,但后来我阅读了C# language specification。我发现这是设计。为什么?因为 C# 是基于 C 的,而 C 的行为方式是这样的。
所以现在的问题是,为什么 C 会有这样的行为? Somebody else asked this question on StackOverflow already。答案非常不令人满意,归结为:
它的行为是这样的,因为它在 C 语言规范中是这样描述的。
这个答案让我想起了我小时候与父母的许多讨论:“为什么我必须打扫房间?” - “因为我们这么说。”。进一步的答案推测(即没有添加任何来源或论据)while() 是 “hacky” 并且 “使用 for(;;) 更有意义”。
我的研究
编辑:已删除,因为它被认为太长了。这基本上是为了弄清楚为什么 C 有这种结构。
我的问题:
经过我所有的研究,我得出结论,如果the for loop 可以,while loop 无法接受空表达式是不合逻辑的。
但如果这是真的,那为什么 C# 语言设计团队要复制这种行为呢?
你:“C#是基于C的,你为什么要重新发明轮子?”
没错,但为什么要做出同样不合逻辑的决定呢?如果你的祖父会跳桥,那你也会跳桥,就因为你是以他为基础的吗?在旧语言的基础上创建一种新语言不是避免/修复旧语言不合逻辑的陷阱的理想情况吗?
所以重复我的问题:
- 为什么 C# 设计团队要复制这种行为?
【问题讨论】:
-
我已经为你改了标题。如果您能想到任何事情,请随意将其更改为更合适的内容。原来是......邀请反对票。就我个人而言,我认为这是一个有趣的问题,尽管可以说只是 Stack Overflow 的切线话题。但是,如果幸运的话,这里的 C# 设计团队的成员可能会偶然发现这一点并提供第一手答案...
-
为什么是
C标签????我不懂 C# 但你不能while(1)吗? -
@Devolus:
while(true)将是 C# 中用于无限 while 循环的惯用语。 -
@David,如果 C# 有这样的结构,为什么要写这么长的帖子???
-
为什么 C# 团队应该偏离众所周知的用法? C、Java、C++ 的行为方式类似。 C# 团队希望设计一种其他开发人员熟悉的语言。
标签: c# c language-design language-specifications