一般信息:
我创建了自己的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
有没有办法只收到邮件?
值为空。
答案 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;
}
}
}