我正在尝试创建自定义异常,此自定义异常必须做的唯一事情是更改异常的消息,但具有原始异常的所有属性。
这个想法是消息会根据我发送的参数而改变。
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;
}
答案 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}";
}