title: The difference between implicit and explicit delegate creation (with and without generics)
body: <p><em>See the four lines in the Go() method below:</em></p>
  
  <pre><code>delegate void Action&lt;T&gt;(T arg);
  delegate void Action();
  
  void DoSomething&lt;T&gt;(Action&lt;T&gt; action)
  {
      //...
  }
  
  void DoSomething(Action action)
  {
      //...
  }
  
  void MyAction&lt;T&gt;(T arg)
  {
      //...
  }
  
  void MyAction()
  {
      //...
  }
  
  void Go&lt;T&gt;()
  {
      DoSomething&lt;T&gt;(MyAction&lt;T&gt;); // throws compiler error - why?
      DoSomething(new Action&lt;T&gt;(MyAction&lt;T&gt;)); // no problems here
      DoSomething(MyAction); // what's the difference between this...
      DoSomething(new Action(MyAction)); // ... and this?
  }
  </code></pre>
  
  <p>Note that the compiler error generated by the first call is:
  <em>The type arguments for method 'Action(T)' cannot be inferred from the usage. Try specifying the type arguments explicitly.</em></p>