Невозможно создать конструктор класса пользовательских исключений с пользовательскими свойствами - PullRequest
0 голосов
/ 15 мая 2018

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

[Serializable]
        class AuthenticationException : Exception
        {
            public int PracticeID { get; set; }

            public AuthenticationException()
                : base() { }

            public AuthenticationException(string message)
                : base(message) { }

            public AuthenticationException(string message, Exception InnerException)
                : base(message, InnerException) { }

            public AuthenticationException(SerializationInfo info, StreamingContext context) 
                : base(info, context) { }

            public  AuthenticationException(int PracticeID)
                : base(PracticeID)
            {
                this.PracticeID = PracticeID;
            }
        }

Я получаю следующие ошибки:

Лучший перегруженный метод соответствует «System.Exception.Exception (string)» содержит недопустимые аргументы

&

не может преобразовать из 'int' в 'string'

Оба они встречаются в части: base (PracticeID) класса.

Я не понимаю, почему здесь ищут строку.

Я попытался найти ответ и прокомментировать эти два ранее заданных вопроса

Пользовательское исключение со свойствами

Как правильно сериализовать настраиваемое исключение .NET?

Я не уверен, что я делаю иначе, чем первый, который вызывает ошибки, и я попытался прочитать / повторить второй, но я полностью потерялся.

Это исключение будет происходить во внутреннем цикле, и я хотел бы иметь блок определения ошибок клиента во внешнем цикле, который имеет дело с этой конкретной ситуацией.

Я полагаю, что обходной путь - это просто использовать свойство Data класса исключения и в блоке catch внешнего цикла проверить, есть ли ключ для элемента с именем что-то вроде «Authenticate», и обработать там исключение.

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

1 Ответ

0 голосов
/ 15 мая 2018

Базовый класс исключений не имеет соответствующего конструктора.

Вместо этого измените код для вызова пустого конструктора (опция A) или, возможно, используйте идентификатор для предоставления сообщения об ошибке по умолчанию (опция B):

[Serializable]
class AuthenticationException : Exception
{
    public int PracticeId { get; }

        // Other constructors

    // Option A
    public AuthenticationException(int practiceId)
        : base()
    {
        PracticeId = practiceId;
    }

    // Option B
    public AuthenticationException(int practiceId)
        : base("Invalid id: " + practiceId)
    {
        PracticeId = practiceId;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...