Как написать конструктор C# с внутренним параметром исключения

Я пытаюсь создать собственный класс исключений в С# 12.0 (.NET 8.0, версия SDK: 8.0.100-rc.2.23502.2), который поддерживает конструктор с внутренним параметром исключения . Вот код, который я изначально пробовал:

      public class TokenAcquisitionException(string message) : Exception(message)
{
    private const string FailedToGetToken = "Failed to get token";
    public TokenAcquisitionException() : this(FailedToGetToken)
    {        
    }

    public TokenAcquisitionException(string message, Exception innerException) : base(message, innerException)
    {
        /* What do I put here? */
    }
}

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

      Error CS8862 A constructor declared in a type with parameter list must have 'this' constructor initializer.

Я нашел проблему на GitHub , в которой обсуждается аналогичная ошибка, но она связана с записями в C# 9 и более поздних версиях, а не с классами. Проблема предполагает, что каждый конструктор в записи с основным конструктором должен вызывать основной конструктор с помощью , иначе компилятор не будет знать, как обрабатывать параметры основного конструктора.

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

      public class TokenAcquisitionException(string message) : Exception(message)
{
    private const string FailedToGetToken = "Failed to get token";
    public TokenAcquisitionException() : this(FailedToGetToken)
    {
    }

    public TokenAcquisitionException(string message, Exception innerException) : this(message)
    {
        /* What do I put here? */
    }
}

Однако ни один из этих подходов не сработал.

Кто-нибудь знает, как правильно реализовать конструктор с внутренним параметром исключения в классе С#? Любая помощь будет принята с благодарностью.

Я ожидал, что смогу вызвать конструктор базового класса с той же сигнатурой конструктора:

      base(message, innerException)

Обычно мы можем вызвать аналогичный конструктор, чтобы передать ответственность за создание экземпляра базовому классу, когда базовый класс уже существенно настраивает объект.

0 ответов

Другие вопросы по тегам