Type.GetType schlägt fehl, wenn es als Methodengruppe, aber nicht im Lambda-Ausdruck aufgerufen wird

Das folgende Beispiel zeigt, dass Type.GetType in einem bestimmten Szenario fehlschlägt.

GetType ist erfolgreich, wenn ich die Klassennamenzeichenfolge (einschließlich Namespace) in einem Lambda-Ausdruck bereitstelle, schlägt jedoch fehl, wenn ich GetType als Methodengruppe aufrufe.

Schlägt fehl:

collectionOfClassNames.Select(GetType)

Gelingt es:

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

Beide Methoden sind erfolgreich, wenn der Klassenpfad den Assemblynamen enthält. Ich vermute, dass dies mit dem aktuellen Kontext / Geltungsbereich zu tun hat, wenn die IL für das oben Genannte generiert wird. Ich kann die Unterschiede in der IL sehen, aber die genaue Ursache kann ich immer noch nicht erklären.

Das Folgende ist ein ausführbares Beispiel, das das Problem veranschaulicht.

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();
        }
    }
}

Ich möchte wissen, warum # 2 fehlschlägt, aber # 3 erfolgreich ist.