Подтвердить что ты не робот

Как отлаживать код инициализатора объекта?

Есть ли способ пошагового отладки кода инициализатора объекта в 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.

4b9b3361

Ответ 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 и выше, без какой-либо настройки.