title: C# extension method for generic type class not found by the compiler
body: <p>I'm trying to extend a generic type class, but I can't get VS to see the extension methods.</p>
  <p>Of course there would be many ways around this and it sure isn't best practice in all situations, but I can't figure out why, of the two apparently identical cases below, the first one works and the other doesn't.</p>
  <p>First, an example of a successful attempt to extend the List class (just to prove I can handle the basics):</p>
  <pre><code>namespace Sandbox.ExtensionsThatWork
  {
      public static class ListExtensions
      {
          public static List&lt;TheType&gt; ExtendedMethod&lt;TheType&gt;(this List&lt;TheType&gt; original)
          {
              return new List&lt;TheType&gt;(original);
          }
  
      }
  
      public class ExtensionClient
      {
          public void UseExtensionMethods()
          {
              List&lt;string&gt; a = new List&lt;string&gt;();
              List&lt;string&gt; b = a.ExtendedMethod();
          }
      }
  
  }
  </code></pre>
  <p>However, the object I want to extend is something like this</p>
  <pre><code>namespace Sandbox.Factory
  {
      public class Factory&lt;T&gt;
      {
          public static Thing&lt;T&gt; Create()
          {
              return new Thing&lt;T&gt;();
          }
      }
  
      public class Thing&lt;T&gt;{}
  
      public static class FactoryExtensions
      {
          internal static Thing&lt;FactoryType&gt; CreateFake&lt;FactoryType&gt;(this Factory&lt;FactoryType&gt; original)
          {
              return new FakeThing&lt;FactoryType&gt;();
          }
      }
  
      public class FakeThing&lt;T&gt; : Thing&lt;T&gt;{}
  
  }
  </code></pre>
  <p>And in this case I can't for the life of me get the compiler to see the extension method.</p>
  <pre><code>namespace Sandbox.FactoryClients
  {
      public class FactoryClient
      {
          public void UseExtensionMethods()
          {
              Factory.Thing&lt;int&gt; aThing = Factory.Factory&lt;int&gt;.Create();
              ///THE COMPILER WON'T FIND THE CreateFake METHOD
              Factory.Thing&lt;int&gt; aFakeThing = Factory.Factory&lt;int&gt;.CreateFake&lt;int&gt;();
          }
      }
  }
  </code></pre>
  <p>What am I missing?</p>
  <p>Thank you all for your time.</p>