Frage

Ich bin ein wenig verwirrt darüber, wann genau meine Property initialisiert wird.

Angenommen, ich habe eine Eigenschaft wie folgt erklärt:

private Dictionary<string, Dictionary<string,string>> MessageLookup
    {
        get
        {
           return messages ?? doSomething();
        }
    }

Die doSomething Methode füllt die Nachrichten Wörterbuch und gibt es zurück.

Meine Frage ist, wann ist dieser Code ausgeführt? Wenn ich einen Haltepunkt in den doSomething Code platzieren, wird es nicht treffen, aber die MessageLookup Eigenschaft ist, Daten hält (dies ist der einzige Ort, es initialisiert wird), wenn ich es im Debugger anzuzeigen.

Ist dieser Code auf dem Bau laufen? wird der Debugger es automatisch ausgeführt, wenn ich über die Variablennamen schweben? Wenn ja, wird deshalb nicht der Haltepunkt erreicht?

War es hilfreich?

Lösung

Dieser Code ausgeführt wird, wenn jemand auf die Eigenschaft bezieht, und nicht vorher.

Wenn Sie den Debugger verwenden, können Sie es sehen werden, weil der Debugger Eigenschaftswerte automatisch zu holen versucht (so können Sie den Zustand des Objekts sehen). Ich weiß nicht, ob der Debugger Haltepunkte ignoriert, während es Eigenschaften für sich die Bewertung -. Das würde alles erklären

Versuchen Sie Ihren Code ausgeführt wird nicht in einem Debugger, und einige Codes Zugriff auf Ihre Immobilie:

var lookup = someObject.MessageLookup;

Machen Sie doSomething() einen Stack-Trace-Dump und Sie werden sehen, was los ist.

Andere Tipps

Es wird ausgeführt, wenn Sie Ihre Immobilie zuerst ausgewertet. Keine Hintergrund Sachen passieren.

Ich vermute, sehen Sie nicht, weil Sie verwenden Schnellüberwachung Ihr Objekt zu inspizieren. An diesem Punkt wird es, ausgeführt und der Haltepunkt wird übersprungen.

Property Getter (und ToString() was das betrifft) angenommen werden

scroll top