不带参数的异常消息

本文关键字:异常 消息 参数 | 更新日期: 2023-09-27 18:18:13

一般信息:

我创建了自己的ListBox,它扩展了System.Windows.Forms.ListBox,并添加了一个方法AddItem(value : string) ,以确保value满足要求并且ListBox中不存在。

如果value不符合要求或已经存在于ListBox中,我会抛出ArgumentException.

我还传递了 ArgumentException 的构造函数,消息和导致异常的参数。

if (this.Items.Contains(value))
{
    throw new ArgumentException(String.Format("'"{0}'" already in list.", value), "value");
}

我的问题:

当我传递两个消息和参数名称时,我通过访问Message来获得两者,这不是我的目的。我只想要消息本身。

值为空。

参数名称:值

有没有办法只接收消息?

值为空。

不带参数的异常消息

这是ArgumentException类中的属性消息的代码

public override String Message
{
    get {
        String s = base.Message;
        if (!String.IsNullOrEmpty(m_paramName)) {
            String resourceString = Environment.GetResourceString("Arg_ParamName_Name", m_paramName);
            return s + Environment.NewLine + resourceString;
        }
        else
            return s;
    }
}

如您所见,在内部,该属性首先从基类 (Exception( 中检索字符串值,然后检查您是否在类的构造函数中传递了 parameterName。如果是这种情况,则 parameterName 将添加到字符串的第一部分并返回给调用方。

这就解释了为什么将两个字符串放在一起。这背后的逻辑在MS开发人员的脑海中。但是我发现它是正确的,Message是您例外的完整文本。

可以编写类 ArgumentException 的简单扩展来实现 Message 与参数名称的分离

public class ArgumentExceptionMessage : ArgumentException
{
    private string _message;
    public ArgumentExceptionMessage(string message, string paramName) 
        : base(message, paramName)
    {
        _message = message;
    }
    public override string Message
    {
        get
        {
            return _message;
        }
    }
}