title: Issues with the "where" in generic inheritance
body: <p>in the following code is an problem on line <code>entities = doSpecialStuff(entities);</code> because i'm "missing" something in where part from my <code>doSpecialStuff()</code> Methode</p>
  
  <p><strong><code>Error</code></strong><br/>
  <code>The type 'T' cannot be used as type parameter 'T' in the generic type or method<br>
      'myWorkClass&lt;T&gt;.doSpecialStuff&lt;T&gt;(IEnumerable&lt;T&gt; entities)'. There is no implicit 
      reference conversion from 'T' to 'ISpezial'.)</code></p>
  
  <h2>Code</h2>
  
  <p>here are my ineritance structure</p>
  
  <pre><code>public class Baseclass { }
  
  public interface ISpezial 
  { 
      int mySpecial{get;set;} 
  }
  
  public class Class1 : Baseclass { }
  
  public class Class2 : Baseclass, ISpezial
  {
      public int mySpecial{ get;set;}
  }
  </code></pre>
  
  <p>here is my data provider</p>
  
  <pre><code>public class myRepository
  {
      public static IEnumerable&lt;TResult&gt; Load&lt;TResult&gt;() where TResult : Baseclass, new()
      {
          List&lt;TResult&gt; myEnum = new List&lt;TResult&gt;();
  
          if (typeof(ISpezial).IsAssignableFrom(typeof(TResult)))
          {
              myEnum.Add((new Class2() { mySpecial = 0 }) as TResult);
              myEnum.Add((new Class2() { mySpecial = 1 }) as TResult);
              myEnum.Add((new Class2() { mySpecial = 2 }) as TResult);
          }
          else
          {
              myEnum.Add((new Class1() as TResult));
              myEnum.Add((new Class1() as TResult));
              myEnum.Add((new Class1() as TResult));
          }
  
          return myEnum;
      }
  }
  </code></pre>
  
  <p>and there it is the class who does stuff and provides errors like a boss</p>
  
  <pre><code>public class myWorkClass&lt;T&gt; where T : Baseclass, new()
  {
      public void doNormalStuff()
      {
          var entities = myRepository.Load&lt;T&gt;();
          if (typeof(ISpezial).IsAssignableFrom(typeof(T)))
          {
              entities = doSpecialStuff(entities);
          }
      }
  
      public IEnumerable&lt;T&gt; doSpecialStuff&lt;T&gt;(IEnumerable&lt;T&gt; entities) where T : ISpezial
      {
          var list = new List&lt;T&gt;();
  
          return list.Where(special =&gt; special.mySpecial==2);
      }
  }
  </code></pre>
  
  <h2>some further question</h2>
  
  <p>How can i avoid the <code>new()</code> in my where's?</p>
  
  <p>and how can i change the Add part <code>myRepository</code> to do <code>myEnum.Add(new Class1());</code> instead of <code>myEnum.Add((new Class1() as TResult));</code> without changing the return <code>IEnumerable&lt;TResult&gt;</code>?</p>