title: Code after yield return is executed
body: <p>Consider the following example:</p>
  
  <pre><code>class YieldTest
  {
      static void Main(string[] args)
      {
          var res = Create(new string[] { "1 12 123", "1234", "12345" });
      }
  
      static IEnumerable&lt;int&gt; Create(IEnumerable&lt;string&gt; strings)
      {
          foreach(string s in strings)
          {
              yield return s.Length;
              if(s.Contains(' '))
              {
                  string[] tokens = s.Split(' ');
                  foreach(string t in tokens)
                  {
                      yield return t.Length;
                  }
              }
          }
      }
  }
  </code></pre>
  
  <p>The call to <code>Create</code> returns {8, 1, 2, 3, 4, 5}.</p>
  
  <p>What really confuses me is that the code after the yield return statement is executed.
  (Why would they name it <code>yield return</code> and not just <code>yield</code> ??) 
  The <a href="http://msdn.microsoft.com/en-us/library/9k7k7cf0.aspx">documentation</a> tells us</p>
  
  <blockquote>
    <p>When a yield return statement is reached in the iterator method,
    expression is returned, and the current location in code is retained.</p>
  </blockquote>
  
  <p>What does that mean? Where does a return occur? What is an iterator method?</p>