编辑:我改变了我的大部分问题,因为它太长了,虽然我的问题是对事实的要求,但它被认为是基于意见的。话虽如此,请阅读评论,我试图解释为什么关闭这个问题是错误的恕我直言。
另外:我想为我最初的问题道歉,我不是以英语为母语的人,我不知道 [blindly] 这个词有如此负面的语气。我实际上在其他问题中使用了这个词。
背景:
考虑以下一段 C# 代码:
for(; /*empty condition*/ ;)
{
//Infinite loop
}
在其他方法中,这被认为是进行无限循环的良好做法。但是当我们用 a 尝试类似的方法时,while loop
它永远不会编译:
while(/*empty condition*/)
{
//Compiler error
}
起初我认为这是我的编译器中的某种错误,但后来我阅读了C# language specification
. 我发现这是设计。为什么?因为 C# 是基于 C 的,而 C 的行为方式是这样的。
所以现在的问题是,为什么 C 会有这样的行为?其他人已经在 StackOverflow 上问过这个问题。答案非常不令人满意,归结为:
它的行为是这样的,因为它在 C 语言规范中是这样描述的。
这个答案让我想起了小时候和父母的许多讨论:“为什么我必须打扫房间?” - “因为我们这么说。” . 进一步的答案推测(即没有添加任何来源或论据)while()
是“hacky”并且“使用for(;;)
更有意义”。
我的研究
编辑:删除,因为它被认为很长。这基本上是为了弄清楚为什么 C 有这种结构。
我的问题:
经过我所有的研究,我得出结论,while loop
如果可以的话, ' 无法接受空表达式是不合逻辑的the for loop
。
但如果这是真的,那么 C# 语言设计团队为什么要复制这种行为呢?
你:“C# 是基于 C 的,你为什么要重新发明轮子?”
没错,但为什么要做出同样不合逻辑的决定呢?如果你的祖父会跳桥,那你也会跳桥,就因为你是以他为基础的吗?并且基于旧语言创建新语言不是避免/修复旧语言不合逻辑陷阱的理想情况吗?
所以重复我的问题:
- 为什么 C# 设计团队要复制这种行为?