Сбой Type.GetType, когда вызывается как группа методов, но не в лямбда-выражении

В следующем примере показан сбой Type.GetType в конкретном сценарии.

GetType успешно выполняется, когда я предоставляю ему строку имени класса (включая пространство имен) в лямбда-выражении, но завершается неудачно, когда я указываю вызов GetType в качестве группы методов.

Сбой:

collectionOfClassNames.Select(GetType)

Удается:

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

Оба метода завершаются успешно, когда путь к классу включает имя сборки. Я подозреваю, что это как-то связано с текущим контекстом / областью действия, учитывая IL, сгенерированный для вышеупомянутого. Я вижу различия в IL, но я все еще не могу объяснить точную причину.

Ниже приведен работоспособный пример, демонстрирующий проблему.

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

Я хотел бы знать, почему # 2 терпит неудачу, но # 3 преуспевает.

Ответы на вопрос(1)

Ваш ответ на вопрос