title: Why does the result of IsGenericType differ in these examples?
body: <p>I have functions, which generate collection of char objects:</p>
  
  <pre><code>public static IEnumerable&lt;char&gt; generic_foo&lt;T&gt;()
  {
      return "1231";
  }
  public static IEnumerable&lt;char&gt; generic_foo2&lt;T&gt;()
  {
      yield return '1';
      yield return '2';
      yield return '3';
  }
  public static IEnumerable&lt;char&gt; foo()
  {
      return "1231";
  }
  public static IEnumerable&lt;char&gt; foo2()
  {
      yield return '1';
      yield return '2';
      yield return '3';
  }
  
  public static void Main()
  {
      var res = foo().GetType().IsGenericType;  //  False
      var gen_res = generic_foo&lt;int&gt;().GetType().IsGenericType;  //  False
  
      var res2 = foo2().GetType().IsGenericType;  //  False
      var gen_res2 = generic_foo2&lt;int&gt;().GetType().IsGenericType;  //  True
  }
  </code></pre>
  
  <p>I was wondered by results of program. Why are result different?
  What is the key difference between foo2/generic_foo2 methods?</p>