2009-05-18 9 views
10

Qualcuno ha qualche consiglio per il debug di eccezioni in un blocco di inizializzatore di oggetti C#? La sintassi dell'inizializzatore dell'oggetto è praticamente tutto o niente, il che può rendere particolarmente difficile la risoluzione dei problemi all'interno di una query LINQ. A corto di rompere la creazione dell'oggetto in un metodo separato, c'è qualcosa che posso fare per vedere quale setter di proprietà lancia un'eccezione?Debug di un inizializzatore di oggetti C#

risposta

13

Disattivazione dell'opzione per passare sopra i setter di proprietà [Passa sopra proprietà e operatori (solo gestiti)] può permetterti di entrare nel sistema di gestione delle proprietà.

In caso contrario, l'opzione migliore è spesso quella di scomporre e eseguire il debug all'esterno dell'istruzione LINQ. È possibile avvolgere i parametri di inizializzazione in un tipo anonimo in linq e costruire gli oggetti al di fuori dell'istruzione linq a scopo di debug.

+0

Puoi spiegare cosa intendi per "includere i parametri di inizializzazione in un tipo anonimo"? Dovrei passare il tipo anonimo al costruttore in qualche modo, o semplicemente creare un metodo di factory utility che assegnerebbe le proprietà? – technomalogical

+0

In questo momento, dai suoni di ciò, stai usando i risultati della tua query per costruire i tuoi oggetti, e ritieni che stia causando un errore (sulla costruzione dell'oggetto). Invece, è sufficiente restituire i risultati della query, quindi creare gli oggetti in un passaggio separato (utilizzando i risultati), in modo da evitare i blocchi di inizializzazione dell'oggetto. –

+0

Ma è possibile in qualche modo passare un tipo anonimo a un costruttore? – wcm

1

Scompare dal blocco inizializzatore oggetto dove si impostano singolarmente ciascuna proprietà. In questo modo puoi effettivamente entrare nel codice.

4

Hai impostato VS per interrompere quando viene generata un'eccezione? (l'impostazione predefinita è di interrompere solo su eccezioni non gestite). Debug | Eccezioni e controllo "gettato".

Questo solo non è probabilmente una risposta alla tua domanda, ma potrebbe aiutare con il debug.

Oltre a ciò, è possibile interrompere temporaneamente il codice dal blocco di inizializzazione (solo per il debug), quindi, se lo si desidera, è possibile ripristinare il blocco di inizializzazione una volta che il codice funziona.

Problemi correlati