Mudança de comportamento ímpar com combinação var, dinâmica e linear

Eu (preguiçosamente) useivar na versão original do código abaixo e obteve uma estranha exceção de tempo de execução em uma parte totalmente diferente do código. Alterar "var" para "int" corrigiu a exceção de tempo de execução, mas não consigo ver o motivo. Eu cozinhei o código para este exemplo;

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

Eu posso ver o tipo de "var" sendo dinâmico em vez de int, mas por que esse tipo se propaga para e afeta o comportamento do valor de retorno da chamada paraTest()?

EDIT: Talvez eu deva esclarecer minha pergunta; Eu posso ver issodynamic Propaga-se pararesult2, o que não consigo entender é por que, quando o IDE indica claramente queList<string> Test(string) é o método chamado, ele ainda infere o valor de retorno como dinâmico. É um caso do IDE ser mais inteligente que o compilador?

questionAnswers(3)

yourAnswerToTheQuestion