一般信息:
我创建了自己的扩展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和paramName时,我都通过访问Message
获得了两者,但这不是我的目的。我只想要消息本身。
值为空。
参数名称:值
是否有仅接收消息的方法?
值为空。
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;
}
}
如您所见,该属性首先在内部从基类中检索字符串值(异常),然后检查是否在类的构造函数中传递了parameterName。如果是这种情况,则将parameterName添加到字符串的第一部分并返回给调用方。这说明了为什么将两个字符串放在一起。 MS开发人员认为这是背后的逻辑。但是我发现它是正确的,
Message
是您的例外情况的全文。可以编写类ArgumentException的简单扩展以实现Message与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; } } }