2009-05-18 14 views
10

Hat jemand Tipps zum Debuggen von Ausnahmen in einem C# -Objektinitialisierungsblock? Die Objektinitialisierersyntax ist im Grunde alles oder nichts, was es besonders schwierig machen kann, Fehler in einer LINQ-Abfrage zu beheben. Kann ich die Objekterstellung nicht in eine separate Methode zerlegen? Kann ich etwas tun, um zu sehen, welcher Property-Setter eine Ausnahme auslöst?Debugging eines C# -Objektinitialisierers

Antwort

13

Wenn Sie die Option zum Überspringen von Eigenschaften-Setter deaktivieren [Eigenschaften und Operatoren überspringen (nur verwaltete)], können Sie die Eigenschaften-Setter aufrufen.

Andernfalls ist es oft die beste Option, es einfach zu lösen und außerhalb der LINQ-Anweisung zu debuggen. Sie können Ihre Initialisierungsparameter in einen anonymen Typ in linq einschließen und Ihr Objekt außerhalb Ihrer linq-Anweisung für Debugging-Zwecke konstruieren.

+0

Können Sie erklären, was Sie meinen, indem Sie Ihre Initialisierungsparameter in einen anonymen Typ umbrechen? Würde ich den anonymen Typ irgendwie an den Konstruktor übergeben oder einfach eine Utility-Factory-Methode erstellen, die die Eigenschaften zuweisen würde? – technomalogical

+0

Im Moment verwenden Sie Ihre Abfrageergebnisse aus den Geräuschen, um Ihre Objekte zu konstruieren, und Sie glauben, dass dies einen Fehler verursacht (bei der Objektkonstruktion). Geben Sie stattdessen einfach die Abfrageergebnisse zurück und erstellen Sie anschließend Ihre Objekte in einem separaten Schritt (mithilfe der Ergebnisse), sodass Sie die Objektinitialisierungsblöcke vermeiden können. –

+0

Aber ist es irgendwie möglich, einen anonymen Typ an einen Konstruktor zu übergeben? – wcm

1

Brechen Sie es aus dem Objektinitialisiererblock, wo Sie jede Eigenschaft einzeln festlegen. Auf diese Weise können Sie tatsächlich in den Code einsteigen.

4

Haben Sie VS eingerichtet, um zu brechen, wenn eine Ausnahme ausgelöst wird? (Der Standard besteht darin, nur bei nicht behandelten Ausnahmen zu brechen). Debuggen | Ausnahmen, und prüfen Sie "geworfen".

Das allein ist wahrscheinlich keine Antwort auf Ihre Frage, aber es könnte beim Debuggen helfen.

Darüber hinaus können Sie Ihren Code vorübergehend aus dem Initialisiererblock (nur zum Debuggen) brechen, und wenn Sie möchten, können Sie den Initialisierungsblock wieder aktivieren, sobald Sie den Code arbeiten.