title: Why can't you modify a collection in a for each loop
body: <p>How can you best explain why replacing an element of a collection you are looping using foreach is permited if you make a copy of it. Example:    </p>
  
  <pre><code>foreach(Item item in Items)
  {
     item.modify //or remove or add
  }
  // will not work
  
  foreach(Item item in Items.ToList())
  {
     item.modify //or remove. or add
  }
  
  //will work altough i dont get it because i am now iterating trough the temporary list
  //and changing its elements. 
  //In my understanding its not like im iterating the list(.ToList) and modifying the source items
  //(Items). A graphic representation would be welcome, my interest is to understand the
  //matter logically
  </code></pre>