Как написать конструктор 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)
Обычно мы можем вызвать аналогичный конструктор, чтобы передать ответственность за создание экземпляра базовому классу, когда базовый класс уже существенно настраивает объект.