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