anon
anon

Reputation: 73

Why can't I use While(1) in C#?

I know this has probably already been answered somewhere, I just can't find it. Why doesn't C# allow me to use while(1)? I know that 'There is no conversion between the bool type and other types' in C# but why? What are the reasons for this, when in c++ it's perfectly acceptable.

Upvotes: 7

Views: 6004

Answers (5)

davbryn
davbryn

Reputation: 7176

It forces a boolean evaluation. Similarly, in order to protect assignment in an if statement's condition from providing a boolean value.

if (x = y) 

this assignment will be evaluated in the sense that "did x get assigned y" - as opposed to "is x equal to y" - not what the programmer likely intended.

If you want an infinitely looping condition us while(true); if you want to loop while a variable is a specific value, set a Bool to true prior to the loop:

Bool valid = (x == 42);
while(valid){//...

Upvotes: 1

John Alexiou
John Alexiou

Reputation: 29254

if 0 is false then which one should be true, 1 or -1? The first is what is assumed to be correct, but the second actully has all its bits set and is equal to ~0 (not false).

Upvotes: 1

nlawalker
nlawalker

Reputation: 6514

You answered your own question: "There is no conversion between the bool type and other types." The C# compiler does this to help enforce correctness and avoid common mistakes, like putting an assignment expression inside a while that always evaluates to true (using one equals sign instead of two).

Upvotes: 4

Rob
Rob

Reputation: 45779

What are the reasons for this, when in c++ it's perfectly acceptable.

Because C# isn't C++. The languages share a similar syntax but they're distinct. C# isn't a successor to C++, it's an entirely new language.

I know that 'There is no conversion between the bool type and other types' in c# but why?

Why should there be? There's no logical conversion I can think of between an integer and a boolean value.

Why doesn't c# allow me to use while(1)?

Is there really something that wrong about using while(true)? =) On a slightly more serious note, while(...) is basically saying, "whilst the condition described inside the brackets evaluates to true, perform the following action(s)". There's really no logical way for the C# compiler to convert 1 to either true or false, hence it doesn't let you use it.

Upvotes: 8

danben
danben

Reputation: 83270

It is to keep programmers from accidentally doing something they did not want to do.

Consider this common pitfall in C/C++:

int x = getValue();
if (x = 10) {
  // do something
}

This will compile and run, but produce unexpected results (the programmer likely meant to check that x equals 10, not assign to x -- otherwise, why would he need the test at all? It will always evaluate to true).

By forcing conditionals to be of boolean type, you avoid this issue.

Upvotes: 19

Related Questions