Я думаю, вам следует изменить оператор if
в вашем get
переопределении Message
на:
if (!String.IsNullOrEmpty(base.Message))
Обратите внимание на !
.
В настоящее время, если сообщение, представленное в конструкции, является пустым или пустым, то вы возвращаете пустое / пустое значение, поэтому инфраструктура заполняет свою собственную, сообщая об исключении.
Предположительно, вы намеревались предоставить свое собственное сообщение , если оно пустое / пустое.
Незначительное обновление - рекомендация
Кстати, я обычно так делаю в конструкторе:
public MyException(string message) : base(message ?? "Default message") { }
В вашем случае я бы сделал это только одним конструктором:
public ConfigElementDoesNotExistException(string sectionName,
string elementName,
string errorMessage = null,
Exception innerEx = null)
: base(errorMessage ?? string.Format("The section {0} doesn't ... {1}",
sectionName ?? "[unknown]", elementName ?? "[unknown]")
, innerEx)
{
_sectionName = sectionName;
_elementName = elementName;
}
Также не забудьте о защищенном конструкторе и переопределении GetObjectData
, чтобы гарантировать, что ваше исключение может быть сохранено / загружено и упорядочено должным образом.