Нечетное изменение поведения с комбинацией var, dynamic и linq

Я (лениво) использовалvar в исходной версии кода ниже и получил странное исключение во время выполнения в совершенно другой части кода. Изменение «var» на «int» исправило исключение времени выполнения, но я не могу понять, почему. Я свел код к этому примеру;

public class Program
{
    private static List<string> Test(string i) { return new List<string> {i}; }
    private static dynamic GetD() { return 1; }

    public static void Main()
    {
        int value1 = GetD();   // <-- int
        var result1 = Test("Value " + value1);
        // No problem, prints "Value 1", First() on List<string> works ok.
        Console.WriteLine(result1.First());

        var value2 = GetD();   // <-- var
        var result2 = Test("Value " + value2);
        // The below line gives RuntimeBinderException 
        // 'System.Collections.Generic.List<string>' does not contain a 
        // definition for 'First'
        Console.WriteLine(result2.First());
    }
}

Я вижу, что тип «var» является динамическим, а не int, но почему этот тип распространяется и влияет на поведение возвращаемого значения вызоваTest()?

РЕДАКТИРОВАТЬ: Может быть, я должен уточнить свой вопрос; я могу видеть этоdynamic распространяется наresult2то, что я не могу понять, это почему, когда IDE четко указывает, чтоList<string> Test(string) вызывается метод, он по-прежнему выводит возвращаемое значение как динамическое. Является ли IDE более умным, чем компилятор?

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

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