使用参数进行自定义异常

时间:2017-09-06 14:03:39

标签: c#

我正在尝试创建自定义异常,此自定义异常必须做的唯一事情是更改异常的消息,但具有原始异常的所有属性。

这个想法是消息会根据我发送的参数而改变。

public class ServiceDireccionException : Exception
{

    public ServiceDireccionException(string type) : base(GetMessage(type)) { }

    public enum TypeOfService
    {
        Provincia,
        Municipio,
        Localidad
    }

    private static string GetMessage(string type)
    {
        string message = "";

        switch (type)
        {
            case nameof(TypeOfService.Provincia):
                message = ("Sucedio un error al buscar la/s" + TypeOfService.Provincia.ToString() + "/s");
                break;

            case nameof(TypeOfService.Municipio):
                message = ("Sucedio un error al buscar lo/s" + TypeOfService.Municipio.ToString() + "/s");
                break;

            case nameof(TypeOfService.Localidad):
                message = ("Sucedio un error al buscar la/s" + TypeOfService.Localidad.ToString() + "/es");
                break;
        }

        return message;
    }

}

当我想在try catch中使用它时,我无法传递参数:

    catch (ServiceDireccionException ex) //<-- It does not prompt me to pass a string.
    {
        throw ex;
    }

1 个答案:

答案 0 :(得分:1)

你会像

一样使用它
throw new ServiceDireccionException(TypeOfService.Provincia);

但因此您需要将构造函数参数类型更改为

public ServiceDireccionException(TypeOfService type) : base(GetMessage(type)) { }

要保留信息,它应包含内部异常

catch (ServiceDireccionException ex) 
{
    throw new ServiceDireccionException(ex, TypeOfService.Provincia);
}

因此构造函数将类似于

public ServiceDireccionException(Exception innerException, TypeOfService type) 
    : base(GetMessage(type), innerException) 
{
}

获取消息

private static string GetMessage(TypeOfService type)
{
    switch (type)
    {
        case TypeOfService.Provincia:
            return $"Sucedio un error al buscar la/s {type}/s";

        case TypeOfService.Municipio:
            return $"Sucedio un error al buscar lo/s {type}/s";

        case TypeOfService.Localidad:
            return $"Sucedio un error al buscar la/s {type}/es";
    }

    return $"Unknown TypeOfService: {type}";
}