Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Construtor com paramName

Boa tarde. Tudo bem?

Como podemos fazer para criar construtores que recebam o nome do parâmetro e passem esse nome para a classe Exception?

Exemplo do meu código:

namespace Exceptions;

public class CurrentAccountException : SystemException
{
    public CurrentAccountException(string? message, string? paramName) : base(message) {

    }

    public CurrentAccountException(string? message, string? paramName, Exception? innerException)
    {

    }
}

Exemplo do "metadata" da class ArgumentException:

namespace System
{
    public class ArgumentException : SystemException
    {
        public ArgumentException();
        public ArgumentException(string? message);
        public ArgumentException(string? message, Exception? innerException);
        public ArgumentException(string? message, string? paramName);
        public ArgumentException(string? message, string? paramName, Exception? innerException);
    }
}

Tks;

2 respostas

Boa noite, a princípio seria só passar o paramName no base, visto que existe um construtor na classe mãe que recebe esses dois parâmetros:

public CurrentAccountException(string? message, string? paramName) : base(message, paramName) {

    }

Isso não funcionou?

solução!

Então...

A classe mãe SystemException (ou Exception direto) não possui construtor que recebe o "paramName" como argumento.

Para contornar isso criei uma classe "CurrentAccountException" que faz essa tratativa para mim, depois herdo ela em outra classe "InsufficientBalanceException". Veja os códigos abaixo:

public class CurrentAccountException : SystemException
{
    public string ParamName { get; }

    public CurrentAccountException()
    {

    }

    public CurrentAccountException(string? message) 
    : base(message)
    {

    }

    public CurrentAccountException(string? message, Exception? innerException) 
    : base(message, innerException)
    {

    }
    public CurrentAccountException(string? message, string? paramName) 
    : this($"{message} (Parameter '{paramName}')")
    {

    }

    public CurrentAccountException(string? message, string? paramName, Exception? innerException) 
    : this($"{message} (Parameter '{paramName}')", innerException)
    {

    }
}
public class InsufficientBalanceException : CurrentAccountException
{
    public InsufficientBalanceException()
    {

    }
    public InsufficientBalanceException(string? message) 
    : base(message)
    {

    }
    public InsufficientBalanceException(string? message, string? paramName) 
    : base(message, paramName)
    {

    }

    public InsufficientBalanceException(string? message, string? paramName, Exception? innerException) 
    : base(message, paramName, innerException)
    {

    }
}