2009-05-18 20 views
10

¿Alguien tiene alguna sugerencia para depurar excepciones en un bloque de inicializador de objetos C#? La sintaxis del inicializador de objetos es básicamente todo o nada, lo que puede hacer que sea especialmente difícil solucionar problemas dentro de una consulta LINQ. A menos que rompa la creación del objeto en un método separado, ¿hay algo que pueda hacer para ver qué establecedor de propiedad está lanzando una excepción?Depuración de un Inicializador de objetos C#

Respuesta

13

Desactivación de la opción para sobreponer a los configuradores de propiedades [Las propiedades y operadores de paso a paso (Solo administrados)] pueden permitirle ingresar a los establecedores de propiedades.

De lo contrario, la mejor opción a menudo es simplemente desglosarla y depurarla fuera de la instrucción LINQ. Puede envolver sus parámetros de inicialización en un tipo anónimo en linq, y construir su objeto (s) fuera de su instrucción linq para fines de depuración.

+0

¿Podría explicar a qué se refiere con "ajustar los parámetros de inicialización en un tipo anónimo"? ¿Pasaría el tipo anónimo al constructor de alguna manera, o simplemente crearía un método de fábrica de utilidad que asignaría las propiedades? – technomalogical

+0

En este momento, por los sonidos de la misma, está usando los resultados de su consulta para construir sus objetos, y cree que está causando un error (en la construcción del objeto). En su lugar, simplemente devuelve los resultados de la consulta, luego crea tus objetos en un paso separado después (usando los resultados), para que puedas evitar los bloques de inicialización de objetos. –

+0

¿Pero es posible pasar de alguna manera un tipo anónimo a un constructor? – wcm

1

Explórelo del bloque de inicializador de objetos donde establece cada propiedad individualmente. De esa forma, puedes entrar al código.

4

¿Ha configurado VS para romper cuando se produce una excepción? (el valor predeterminado es romper solo las excepciones no controladas). Depurar | Excepciones y marque "arrojado".

Eso solo probablemente no sea una respuesta a su pregunta, pero podría ayudar con la depuración.

Más allá de eso, puede romper temporalmente el código del bloque de inicialización (solo para la depuración), y luego, si lo desea, puede restablecer el bloque de inicializador una vez que tenga el código en funcionamiento.

Cuestiones relacionadas