C# исключение нулевой ссылки, как определить виновника в указанной строке - PullRequest
1 голос
/ 01 мая 2020

Мы все устали от подобных исключений, но есть ли способ быстро найти оскорбительную вещь? Обычно такого рода исключения выдаются в такой строке:

var myVar = somethingUninitallized.property;

И легко видеть, что правая часть назначения является причиной. Однако бывают случаи, когда строки такие длинные:

var myVar = x.DoSomething(y.FirstDoThis(isThisInitiallized).aProperty, z.ThenDoThis(whatAboutThis).anotherProperty).ComplicatingThings().thisHappensSometimes;

И мы получаем исключение в этой строке. Да, мы могли бы написать код по-другому, но в этом случае мы могли бы отлаживать код других людей, и для его изменения потребовалось бы перекомпилировать в течение 15 минут, потребовать авторизацию или любое другое препятствие. Это тривиальный пример, и я могу подумать и о linq, но наверняка есть и другие, более сложные сценарии ios. Я обычно проверяю каждую вещь одну за другой в 2020 году.

Невозможно получить из инструментов отладчика или как-то еще, что с нулевой ссылкой?

1 Ответ

3 голосов
/ 02 мая 2020

Вот ответ, скопированный из Отладка System.NullReferenceException , написанный Томас Ардел :


Использование анализа нулевых ссылок в Visual Studio

Если вы работаете в Visual Studio 2017 или новее, у вас будет доступна функция анализа нулевых ссылок. Имея это в виду, Visual Studio может показать вам именно то, что является нулевым. Давайте используем этот пример цепочки методов:

var street = service.GetUser().Address.Street;

Чтобы включить анализ от go до Отладка | Windows | Настройки исключений . Проверьте Общие языковые исключения времени выполнения (если еще не отмечены) или расширьте узел и проверьте интересующие вас исключения.

В этом случае вы можете проверить System.NullReferenceException . При запуске кода отладчик прерывается на NullReferenceException, и теперь вы видите окно Exception Throw :

enter image description here

Voila ! В окне говорится: «ConsoleApp18.User.Address. get вернул null». Именно то, что мы хотели увидеть.

...