Cambio de comportamiento impar con la combinación var, dynamic y linq.

Yo (perezosamente) usévar en la versión original del siguiente código y obtuve una extraña excepción de tiempo de ejecución en una parte completamente diferente del código. Cambiar "var" a "int" corrigió la excepción de tiempo de ejecución pero no puedo ver por qué. He reducido el código a este ejemplo;

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

Puedo ver que el tipo de "var" es dinámico en lugar de int, pero ¿por qué ese tipo se propaga y afecta el comportamiento del valor de retorno de la llamada aTest()?

EDITAR: Tal vez debería aclarar mi pregunta; Puedo ver esodynamic se propaga aresult2, lo que no puedo entender es por qué, cuando el IDE indica claramente queList<string> Test(string) es el método llamado, todavía infiere el valor de retorno como dinámico. ¿Es un caso de que el IDE sea más inteligente que el compilador?

Respuestas a la pregunta(3)

Su respuesta a la pregunta