Type.GetType falla cuando se invoca como grupo de métodos pero no en la expresión lambda

El siguiente ejemplo muestra Type.GetType fallando en un escenario específico.

GetType tiene éxito cuando le proporciono la cadena de nombre de clase (incluido el espacio de nombres) en una expresión lambda, pero falla cuando especifico la llamada a GetType como un grupo de métodos.

Falla

collectionOfClassNames.Select(GetType)

Tiene éxito

collectionOfClassNames.Select(s => GetType(s))

Ambos métodos tienen éxito cuando la ruta de clase incluye el nombre del ensamblado. Sospecho que tiene algo que ver con el contexto / alcance actual dado el IL generado para lo anterior. Puedo ver las diferencias en la IL pero todavía no puedo explicar la causa exacta.

El siguiente es un ejemplo ejecutable que demuestra el problema.

using System;
using System.Linq;
using System.Reflection;

namespace GetTypeTest
{
    public class FindMe{}

    class Program
    {
        static void Main(string[] args)
        {
            var assemblyName = Assembly.GetExecutingAssembly().FullName;
            var className = "GetTypeTest.FindMe";
            var classAndAssembly = string.Format("{0}, {1}", className, assemblyName);

            // 1) GetType succeeds when input is "class, assembly", using method group
            var result = new[] { classAndAssembly }.Select(Type.GetType).ToArray();
            Console.WriteLine("1) Method group & class+assembly: {0}", result.First());

            // 2) GetType fails when input is just the class name, using method group
            var result2 = new[] { className }.Select(Type.GetType).ToArray();
            Console.WriteLine("2) Method group & class name only: {0}", result2.First());

            // 3) Identical to (2) except using lamba expression - this succeeds...
            var result3 = new[] { className }.Select(s => Type.GetType(s)).ToArray();
            Console.WriteLine("3) Lambda expression & class name only: {0}", result3.First());

            // 4) Method group and core type class name
            var result4 = new[] { "System.String" }.Select(Type.GetType).ToArray();
            Console.WriteLine("4) Method group for System.String: {0}", result4.First());

            Console.ReadLine();
        }
    }
}

Me gustaría saber por qué # 2 falla pero # 3 tiene éxito.

Respuestas a la pregunta(1)

Su respuesta a la pregunta