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
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.
Scompare dal blocco inizializzatore oggetto dove si impostano singolarmente ciascuna proprietà. In questo modo puoi effettivamente entrare nel codice.
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.
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
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. –
Ma è possibile in qualche modo passare un tipo anonimo a un costruttore? – wcm