<ч />
Похоже, я начал битву исключительного подкласса. В зависимости от того, какое руководство Microsoft Best Practices вы соблюдаете ... вы можете наследовать от System.Exception или System.ApplicationException. Есть хороший (но старый) пост в блоге, который пытается устранить путаницу. Я пока оставлю свой пример с Exception, но вы можете прочитать пост и выбрать, исходя из того, что вам нужно:
http://weblogs.asp.net/erobillard/archive/2004/05/10/129134.aspx
Битвы больше нет! Спасибо Фредерику за указание на правило FxCop CA1058, в котором говорится, что ваши исключения должны наследоваться от System.Exception, а не от System.ApplicationException:
CA1058: типы не должны расширять определенные базовые типы
<ч />
Определите новый класс, который наследуется от Exception (я включил несколько конструкторов ... но их не нужно):
using System;
using System.Runtime.Serialization;
[Serializable]
public class MyException : Exception
{
// Constructors
public MyException(string message)
: base(message)
{ }
// Ensure Exception is Serializable
protected MyException(SerializationInfo info, StreamingContext ctxt)
: base(info, ctxt)
{ }
}
А в другом месте вашего кода выкинуть:
throw new MyException("My message here!");
<ч />
EDIT
Обновлено с изменениями, чтобы обеспечить Сериализуемое Исключение. Подробности можно найти здесь:
Архив блога Winterdom - Сериализуем классы исключений
Обратите особое внимание на раздел о шагах, которые необходимо предпринять, если вы добавите пользовательские свойства в свой класс исключений.
Спасибо Игорю за то, что позвонили мне!