C# 不带参数的异常消息

C# 不带参数的异常消息,c#,exception,listbox,C#,Exception,Listbox,一般信息: 我创建了自己的列表框,它扩展了System.Windows.Forms.ListBox,并添加了一个方法AddItem(value:string),确保value满足要求,并且不存在于列表框中 如果值不符合要求或已存在于列表框中,我将抛出一个参数异常 我还同时传递ArgumentException的构造函数,消息加上导致异常的参数 if (this.Items.Contains(value)) { throw new ArgumentException(String.Form

一般信息:

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

如果
不符合要求或已存在于
列表框
中,我将抛出一个
参数异常

我还同时传递ArgumentException的构造函数,消息加上导致异常的参数

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

当我同时传递message和paramName时,我通过访问
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;
    }
}
如您所见,在内部,属性首先从基类(异常)检索字符串值,然后检查您是否在类的构造函数中传递了parameterName。如果是这种情况,那么parameterName将添加到字符串的第一部分并返回给调用者

这解释了为什么要将这两个字符串组合在一起。这背后的逻辑在微软开发者的头脑中。然而,我发现它是正确的,
消息
是您的异常的完整文本

if (this.Items.Contains(value))
{
    throw new ArgumentException(String.Format("\"{0}\" already in list.", value), "value");
}
可以编写ArgumentException类的简单扩展,以实现消息与parameterName的分离

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

您是否尝试只传递消息部分?ArgumentException构造函数还有一个重载,它只使用MessageI did,然后就可以工作了,但是如果两者都定义了,为什么heck“Message”会同时提供这两个信息呢?如果我需要paramName,我只需访问
paramName
。这可能永远不会被记录,但只是为了以防万一,我想在这里添加参数名。谢谢。因此,实现这一点的唯一方法是编写自己的
ArgumentException
,并通过
System.Argument.Exception
对其进行扩展。好的,谢谢你的快速回复,这对我有点帮助,虽然这不是我想要的答案:D