Zmiana zachowania nieparzystego z kombinacją var, dynamic i linq

Użyłem (leniwie)var w oryginalnej wersji poniższego kodu i miał dziwny wyjątek czasu wykonywania w zupełnie innej części kodu. Zmiana „var” na „int” naprawiła wyjątek czasu wykonywania, ale nie wiem, dlaczego. Gotowałem kod do tego przykładu;

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

Widzę, że typ „var” jest dynamiczny zamiast int, ale dlaczego ten typ propaguje się i wpływa na zachowanie wartości zwracanej wywołaniaTest()?

EDYCJA: Może powinienem wyjaśnić moje pytanie; Rozumiemdynamic propaguje doresult2, czego nie rozumiem, dlaczego, gdy IDE wyraźnie to pokazujeList<string> Test(string) jest to metoda zwana, nadal zwraca wartość zwracaną jako dynamiczną. Czy przypadek IDE jest bardziej inteligentny niż kompilator?

questionAnswers(3)

yourAnswerToTheQuestion