I decided to learn some Python (IronPython) syntax today. In doing so, I was impressed by a construct that it allows with its loops. 

Python supports an `else` clause on its loops. An `else` on a loop basically says, "if this loop finished normally, then enter this clause".

Allow me to demonstrate using C#. 

This code:

```
Something something = SomeCallToSetThisUp();
bool isCompatable = false;
foreach (Widget widget in widgets)
{
   isCompatable = widget.IsCompatableWithSomething(something);

   if (!isCompatable)
      break;
}
if (isCompatable)
   compatableSomethings.Add(something);

```

could become this code (not valid C#):

```
Something something = SomeCallToSetThisUp();
foreach (Widget widget in widgets)
{
   if (!widget.IsCompatableWithSomething(something));
      break;
}
else
   compatableSomethings.Add(something);

```

Having never seen this, it struck me as cool. And once you learn it, it seemed as readable as any code I have seen.

While not universally needed (sometimes you want to affect every item in the list), I do think that it would be useful.

So, my question is: **Why isn't this in C#?**

I have a few ideas why:

* `break` can make debugging harder, so the designers did not want to encourage it.
* Not everything that is shiny can make it into the language. (limited scope).

But those are just guesses. **I am asking for an actual canonical reason**.