könnte Dieses Blog-Posting Ihnen nützlich sein: http://blogs.msdn.com/b/cburrows/archive/2010/04/01/errata-dynamic-conversions-and-overload-resolution.aspx
Insbesondere: „Wenn Sie einen Methodenaufruf mit einem dynamischen Argumente haben, ist es Zeit dynamisch versandt wird.“
Das bedeutet, dass C# nicht weiß, welche Überladung bis zur Laufzeit aufgerufen wird. Es weiß nicht zur Kompilierzeit. Mein Verständnis ist, dass es nicht einmal überprüfen Sie, was die möglichen Überladungen zur Kompilierzeit sind (warum sollte es?), Oder notieren Sie die Tatsache, dass in Ihrem Fall sie alle Zeichenfolgen zurückgeben.
So zur Kompilierzeit ist der Rückgabewert Foo
nicht bekannt. Daher wird der Typ x
zur Kompilierungszeit dynamic
bestimmt.
Was wäre, wenn Sie nur eine einzige "Foo" -Funktion hätten, die eine 'Hashtable' zur Verfügung stellt? Der Compiler weiß nicht im Voraus, was als Rückgabewert zurückkommt. Du hättest die Implementierung für 'Foo' only (zur Laufzeit) generieren können. –
@Hamish Grubijan, wenn Sie die "Foo" -Funktion aufrufen, weiß der Compiler, welche Funktion zur Kompilierzeit aufgerufen wird. Versuchen Sie, diese Funktion statisch zu machen, drücken Sie F12 und es wird direkt zur richtigen Funktion navigiert. –
@Darin, warum macht es statisch einen Unterschied? –