为什么我不能在C#中使用While(1)?

ano*_*non 8 c#

我知道这可能已经在某处得到了回答,我找不到它.为什么C#不允许我使用while(1)?我知道'C#中的bool类型和其他类型之间没有转换',但为什么呢?这是什么原因,在c ++中它是完全可以接受的.

dan*_*ben 20

这是为了防止程序员意外地做一些他们不想做的事情.

考虑一下C/C++中常见的陷阱:

int x = getValue();
if (x = 10) {
  // do something
}
Run Code Online (Sandbox Code Playgroud)

这将编译并运行,但产生意想不到的结果(程序员可能意味着检查x等于10,而不是分配x- 否则,他为什么需要测试?它将始终评估为true).

通过强制条件为布尔类型,可以避免此问题.

  • @Luther,我认为你应该与C#开发团队讨论你的问题,而不是danben.他所做的就是解释C#是如何工作的,它的局限性是什么等等.为什么你会说这是错的?一个完全不正确的例子,说明如何不对某人进行投票. (2认同)

Rob*_*Rob 8

这是什么原因,在c ++中它是完全可以接受的.

因为C#不是C++.这些语言具有相似的语法,但它们是截然不同的.C#不是C++的继承者,它是一种全新的语言.

我知道'c#中的bool类型和其他类型之间没有转换',但为什么呢?

为什么会这样?在整数和布尔值之间没有我能想到的逻辑转换.

为什么c#不允许我使用while(1)?

使用时真的有问题while(true)吗?=)稍微严肃一点,while(...)基本上是说,"虽然括号内描述的条件评估为真,但执行以下操作".C#编译器实际上没有逻辑方法将1转换为truefalse,因此它不允许您使用它.

  • @Luther:不在Visual Basic或C#中.事实上,Visual Basic*确实*定义了一个默认的从布尔到整数的转换,它与你的不同.除非有人定义转换,否则整数不是布尔值 - 为了许多目的,true/false可以很好地映射到1/0,但这并不能使它成为自然法则. (2认同)