Как отлаживать код инициализатора объекта?
Есть ли способ пошагового отладки кода инициализатора объекта в Visual Studio?
Пример:
return new Veranstaltung()
{
ID = tblVeranstaltung.VeranstaltungsID,
Titel = tblVeranstaltung.Titel,
KursNummer = tblVeranstaltung.Kursnummer,
ErsterTermin = tblVeranstaltung.ersterTermin,
Dauer = tblVeranstaltung.schulungsTage,
StartZeit = tblVeranstaltung.BeginnZeit,
EndZeit = tblVeranstaltung.Endzeit,
KostenNettoValue = tblVeranstaltung.PreisNetto ?? default(decimal),
IsLastMinute = tblVeranstaltung.lastMinute == 1,
IsVerkuerzt = tblVeranstaltung.istVerkuerzt == 1,
IsGeschlossen = tblVeranstaltung.istGeschlosseneVeranstaltung == 1,
IsIntern = tblVeranstaltung.istInterneVeranstaltung == 1,
StandortID = Convert.ToInt32(tblVeranstaltung.StandortID),
LastMinuteRabatt = tblVeranstaltung.lastMinuteRabatt ?? default(decimal)
};
Иногда я получаю ошибки в этом виде кода (например, когда преобразование в int завершается с ошибкой), и VS, похоже, не может пройти через него, он просто выдает ошибку для всей строки, и я должен попробовать, какой из них инициализации не удались.
Есть ли простой способ отладки этого или лучше избегать инициализатора объекта для больших или сложных инициализаций?
Я использую VS 2010 и С# 4.0.
Ответы
Ответ 1
Инициализаторы объектов должны храниться для простой инициализации объекта. Если вы находитесь в точке, где у вашего конструктора объектов есть код, который может выйти из строя (например, выбрасывание исключения), не используйте его. Лучше полагаться на шаблон объекта, который в зависимости от ваших потребностей может быть factory, абстрактным factory и т.д....
Это также гарантирует, что все пользователи вашего класса не смогут создать экземпляр, который находится в недопустимом состоянии (например, они забывают инициализировать член или инициализировать связанные члены с неправильными значениями и т.д.)
Ответ 2
или лучше избегать инициализатора объекта для больших или сложных инициализаций?
Да, будет трудно поддерживать (и отлаживать).
Ответ 3
Поддержка отладки инициализаторов объектов не очень хороша в Visual Studio 2010. Это может быть прагматично избегать использования инициализаторов объектов для больших или сложных инициализаций по этой причине, но я не рассматриваю использование больших или сложных (например, вложенных ) инициализация объектов и неправильный выбор дизайна сами по себе.
Я обнаружил, что для сопоставления объектов, которые представляют документы/записи (например, ваш пример), он делает очень читаемый декларативный стиль, сводя к минимуму "шум" в коде и позволяя читателю более четко видеть взаимосвязь между источника и цели. Этот подход также поощряет разделение отображения данных от проверки данных, которое, как мне кажется, желательно.
Нулевой безопасный оператор разыменования также очень помог бы при кодировании в этом стиле, но в другой теме! Надеюсь, будущее отношение Visual Studio может улучшить отладку этих полезных конструкций.
Ответ 4
Не уверен, возможно ли это в Visual Studio 2010, но в Visual Studio 2017 это можно сделать, отключив параметр для переключения параметров установки свойств в параметрах отладки Visual Studio:
![enter image description here]()
Ответ 5
Step Into (F11) работает во время отладки в VS2015 и выше, без какой-либо настройки.