outcoldman
outcoldman Denis Gladkikh

Проблемы предыдущей задачи

C#, Example, and Простые задачи

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

Как я и ожидал – правильные ответы нашлись. Не знаю, что толкает людей делать статические поля, а еще хуже - инициализацию в статических методах. Неужели мало примеров о том, что это плохо? В общем, очевидных проблем нашлось тут много: поток никто не закрывает (на самом деле это был мой запланированный отвлекающий маневр, хотя смысла в нем, наверное, нет). Кто-то просто сказал, что хорошо было бы проверки вставить, чтобы не получить NullReferenceException – полностью согласен.

Но самая большая проблема этого кода (да и вообще всех статических конструкторов и инициализаций статических переменных), что никто не будет ожидать, что метод IsObsolete может бросить NullReferenceException. И правильно сказали в комментариях, если код их метода GetLegacyStatements выдаст исключение, то класс не будет проиницилизирован должным образом, и переменная ApplicationObsoleteStatements будет равен null. Как такого можно достичь? Кто-нибудь что-нибудь поменяет, этот метод не будет убивать AppDomain, да и использоваться этот код будет редко – вот и будет результат.

Have feedback or questions? Looking for consultation?

My expertise: MongoDB, ElasticSearch, Splunk, and other databases. Docker, Kubernetes. Logging, Metrics. Performance, memory leaks.

Send me an email to public@denis.gladkikh.email.

The content on this site represents my own personal opinions and thoughts at the time of posting.

Content licensed under the Creative Commons CC BY 4.0.