title: Return Iterator Method
body: <p>Let <code>FirstMethod</code> be defined to be an iterator method. Let <code>SecondMethod</code> be defined to invoke <code>FirstMethod</code>, but return the result directly rather than <code>foreach</code>ing over it and <code>yield</code>ing its items. If <code>ThirdMethod</code> iterates over the result of <code>SecondMethod</code>, is the entire chain treated as an iteration, or to achieve such must I <code>yield</code> inside of <code>SecondMethod</code>?</p>
  
  <p>e.g.</p>
  
  <pre><code>IEnumerable&lt;string&gt; FirstMethod()
  {
    yield return "one";
    yield return "two";
    yield return "three";
  }
  
  IEnumerable&lt;string&gt; SecondMethod()
  {
    return FirstMethod();
  }
  
  IEnumerable&lt;string&gt; ThirdMethod()
  {
    foreach (string item in SecondMethod())
    {
      yield return item;
    }
  }
  
  void Main()
  {
    foreach (string item in ThirdMethod())
    {
      Console.WriteLine(item);
    }
  }
  </code></pre>
  
  <p>I realize that I will still get all of the items to display in this example. My concern, however, is to preserve the "lazy" evaluation of the iterators until <code>Main</code>.</p>