Seltsames Verhalten ändert sich mit der Kombination von var, dynamic und linq

Ich habe (träge) benutztvar in der Originalversion des folgenden Codes und bekam eine seltsame Laufzeitausnahme in einem ganz anderen Teil des Codes. Durch Ändern von "var" in "int" wurde die Laufzeitausnahme behoben, aber ich kann nicht genau verstehen, warum. Ich habe den Code auf dieses Beispiel reduziert.

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

Ich kann sehen, dass der Typ des "var" dynamisch anstelle von int ist, aber warum verbreitet sich dieser Typ und beeinflusst das Verhalten des Rückgabewerts des Aufrufs anTest()?

EDIT: Vielleicht sollte ich meine Frage klären; Ich kann sehen, dassdynamic propagiert zuresult2Was ich nicht verstehen kann ist, warum, wenn die IDE dies deutlich anzeigtList<string> Test(string) Wird die Methode aufgerufen, so leitet sie den Rückgabewert trotzdem als dynamisch ab. Ist die IDE schlauer als der Compiler?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage