Другие ответы (не включая ответа от chopikadze), как представляется, на основе разночтений фактов. Ни один из примеров не выбрасывает исключение.
Скорее, в первом примере построенное исключение ex
предоставляет сообщение, поскольку значение параметра сообщения конструктора было нулевым. Сообщение «исключение типа« System.Exception »было выбрано».
Общепринятой практикой является некорректное поведение, когда ссылка на объект равна нулю, так что это «как это можно объяснить». Независимо от того, «ожидается», конечно, зависит от ваших ожиданий.
Исключение исключений при обработке исключений может быть проблематичным, поэтому разработчики каркаса должны были выбрать это поведение, чтобы уменьшить эту возможность. Это был бы кошмар, если честно, если бы все мы должны были рассмотреть возможность того, что сообщения об исключениях могут быть пустыми.
EDIT
поведение также задокументировано в the remarks for the Message property: «Если сообщение не было поставлено конструктору для текущего экземпляра, система обеспечивает сообщение по умолчанию, который отформатирован с использованием текущей культуры системы.»
Я просмотрел спецификацию CLI и в спецификации C#, и я не нашел упоминания о требовании, чтобы сообщение имело ненулевое возвращаемое значение, поэтому я предполагаю, что это поддерживает представление о том, что это поведение является конструктивным решением для структуры.
Отметьте ctor «Исключение» с помощью .NET Reflector или Telerik JustDecompile :) – kol