title: Why does C# also not allow empty conditions in while loops?
body: <p><strong>Edit: I changed most of my question, because it was too long and altough my question is a request of facts, it was considered opinion based.</strong> Having said that, please read the comments where I try to explain why closing this question was wrong IMHO. </p>
  
  <p><strong><sub>Also: I'd like to appologize for my initial question, I am not a native English speaker and I didn't know the word [blindly] had such a negative tone. I actually used the word in other questions.</sub></strong></p>
  
  <hr>
  
  <p><strong>Background</strong>:</p>
  
  <p>Consider the following piece of C# code:</p>
  
  <pre><code>for(; /*empty condition*/ ;)
  {
      //Infinite loop   
  }
  </code></pre>
  
  <p>This amongst other methods is considered good practice to make an infinite loop. But when we would try a similar approach with a <code>while loop</code> it would never compile:</p>
  
  <pre><code>while(/*empty condition*/)
  {
      //Compiler error
  }
  </code></pre>
  
  <p>At first I thought that this was some sort of bug in my compiler, but then I read the <code>C# language specification</code>. I found this was be design. Why? Because C# is based on C, and C behaves this way.</p>
  
  <p>So now the question is, why does C behave like this? <a href="https://stackoverflow.com/questions/13146830/no-loop-condition-in-for-and-while-loop">Somebody else asked this question on StackOverflow already</a>. The answer was pretty unsatisfying and came down to this:</p>
  
  <blockquote>
    <p>It behaves like this because it is described like this in the C language specification.</p>
  </blockquote>
  
  <p>This answer reminded me of many discussions I had with my parents when I was a kid: <em>"Why do I have to clean my room?" - "Because we say so."</em>. Further answers speculate (i.e. no sources or arguments were added) that <code>while()</code> is <em>"hacky"</em> and that <em>"using <code>for(;;)</code> made more sense"</em>.</p>
  
  <hr>
  
  <p><strong>My research</strong></p>
  
  <p>Edit: deleted because it was considered to long. It basically was an effort to figure out why C had this construction.</p>
  
  <hr>
  
  <p><strong>My question:</strong></p>
  
  <p>After all my research I concluded that the <code>while loop</code>'s inability to accept empty expressions is illogical if <code>the for loop</code> can.</p>
  
  <p>But if that is true, then why did the C# language design team copy this bevahiour?</p>
  
  <p>You: <em>"C# is based on C and why would you reinvent the wheel?"</em> </p>
  
  <p>True, but why make the same illogical decissions? If your grandfather would jump of a bridge, then would you do it too, just because you are based on him? And isn't the creation of a new language - based on an old one - the ideal situation to avoid/fix the illogical pitfalls of the old language?</p>
  
  <p>So to repeat my question:</p>
  
  <ul>
  <li>Why did the C# design team copy this behaviour?</li>
  </ul>