具有自定义Message属性的继承异常类

本文关键字:继承 异常 属性 自定义 Message | 更新日期: 2023-09-27 17:51:21

public class GroupWithSpecificOptionsNotFoundException : Exception
{
    public GroupWithSpecificOptionsNotFoundException(string place, Dictionary<string, string> options)
            : base(string.Format("Group with specific options not found, in ({0}), at ({1})", place, DateTime.Now.ToString()))
    {
        foreach (string key in options.Keys)
        {
            this.Message += string.Format("Option Name : ({0}) with Value : ({1}) not found in this group options set", key, options[key]);
        }
    }
}

这个想法很简单,我想将键/值对象包含到异常的Message。此操作不能在base()中执行,也不能在构造函数中执行("Message is read only")。

我找到了一个解决方案,其中静态函数可以做到这一点:

public class GroupWithSpecificOptionsNotFoundException : Exception
{
    public static string GenerateOptionValueString(Dictionary<string, string> options)
    {
        string msg = string.Empty;
        foreach (string key in options.Keys)
        {
            msg += string.Format("Option Name : ({0}) with Value : ({1}) not found in this group options set", key, options[key]);
        }
        return msg;
    }
    public GroupWithSpecificOptionsNotFoundException(string place, Dictionary<string, string> options)
            : base (string.Format("Group with specific options not found ({2}), in ({0}), at ({1})",
                    place, DateTime.Now.ToString(), GroupWithSpecificOptionsNotFoundException.GenerateOptionValueString(options)))
    {
    }
}

但是我不太满意!对于这种和类似的情况,有没有其他的解决方法?

具有自定义Message属性的继承异常类

编写异常的一般指导原则指出,您应该使用3个常见元素编写异常。例如:

public class MyException : Exception
{
    public MyException()
    {
    }
    public MyException(string message) : base(message)
    {
    }
    public MyException(string message, Exception innerException) 
        : base(message, innerException)
    {
    }
}

我认为你只需要一个工厂,它将处理异常的创建与自定义消息。