没有参数的异常消息

时间:2015-10-17 21:20:29

标签: c# exception listbox

一般信息:

我创建了自己的ListBox,扩展了System.Windows.Forms.ListBox并添加了方法AddItem(value : string),以确保value符合要求且ListBox中不存在。< / p>

如果value不符合要求或ListBox已经存在ArgumentException

我也传递了ArgumentException的构造函数,消息加上引起异常的param。

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

我的问题:

当我同时通过时,消息&amp; paramName,我通过访问Message获得这两个,这不是我的目的。我只想要消息本身。

  

值为空。

     

Parametername:value

有没有办法只收到邮件?

  

值为空。

1 个答案:

答案 0 :(得分:0)

这是ArgumentException类中的属性Message的代码

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;
    }
}

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

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

可以编写ArgumentException类的简单扩展来实现Message与ParamName的分离

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;
        }
    }
}