2009-05-18 2 views
10

Есть ли у кого-нибудь советы по отладке исключений в блоке инициализатора объекта C#? Синтаксис инициализатора объекта в основном все или ничего, что может затруднить устранение неполадок внутри запроса LINQ. Не удалось ли вы разбить создание объекта на отдельный метод, есть ли что-нибудь, что я могу сделать, чтобы увидеть, какой набор свойств генерирует исключение?Отладка инициализатора объектов C#

ответ

13

Отключить опцию перехода по средствам настройки свойств [Сдвиг по свойствам и операторам (только управляемый)] позволяет вам войти в настройки свойств.

В противном случае наилучшим вариантом является просто разбить его и отладить его вне оператора LINQ. Вы можете перенести свои параметры инициализации в анонимный тип в linq и построить свой объект (-ы) вне вашего оператора linq для целей отладки.

+0

Не могли бы вы объяснить, что вы подразумеваете под «обертыванием параметров инициализации в анонимный тип»? Я каким-то образом передаю анонимный тип конструктору или просто создаю метод фабричной утилиты, который присваивал бы свойства? – technomalogical

+0

Прямо сейчас, из его звуков, вы используете результаты своего запроса для создания своих объектов, и вы считаете, что это вызывает ошибку (по построению объекта). Вместо этого просто верните результаты запроса, а затем создайте свои объекты на отдельном этапе (используя результаты), чтобы избежать блокирования инициализатора объекта. –

+0

Но можно ли каким-то образом передать анонимный тип конструктору? – wcm

1

Выньте его из блока инициализатора объекта, в котором ваша настройка каждого свойства индивидуально. Таким образом, вы действительно можете войти в код.

4

Установили ли вы, чтобы VS нарушался, когда генерируется исключение? (по умолчанию происходит разрыв только при необработанных исключениях). Отладка | Исключения, и проверить «бросили».

Возможно, это не ответ на ваш вопрос, но это может помочь в отладке.

Кроме того, вы можете временно вывести код из блока инициализатора (только для отладки), а затем, если хотите, вы можете восстановить блок инициализатора, как только у вас будет действующий код.