System.Dynamic Fehler?

Während ich mit der C # 4.0-Dynamik spiele, habe ich seltsame Dinge mit dem Code festgestellt:

using System.Dynamic;

sealed class Foo : DynamicObject
{
    public override bool TryInvoke(
        InvokeBinder binder, object[] args, out object result)
    {
        result = new object();
        return true;
    }

    static void Main()
    {
        dynamic foo = new Foo();

        var t1 = foo(0);
        var t2 = foo(0);
        var t3 = foo(0);
        var t4 = foo(0);
        var t5 = foo(0);
    }
}

Ok, es funktioniert, aber ... schauen Sie sich das IntelliTrace-Fenster an:

Screenshot http://img717.imageshack.us/img717/4914/10435230.png

Jeder Aufruf (und auch alle anderen Operationen an dynamischen Objekten) führt also dazu, dass seltsame Ausnahmen zweimal geworfen und abgefangen werden!

Ich verstehe, dass manchmal Ausnahmemechanismen für Optimierungen verwendet werden können, zum Beispiel der erste Aufruf von dynamic an einen Stub-Delegaten, der einfach eine Ausnahme auslöst - dies kann wie ein Signal an dynamic binder sein, ein korrektes Mitglied aufzulösen und einen neuen Punkt zu setzen delegieren. Der nächste Anruf bei demselben Teilnehmer wird ohne Prüfung durchgeführt.

Aber ... das Verhalten des obigen Codes sieht sehr seltsam aus. Vielleicht zweimal Ausnahmen pro Operation in DynamicObject auslösen und abfangen - ist das ein Fehler?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage