不带参数的异常消息
本文关键字:异常 消息 参数 | 更新日期: 2023-09-27 18:18:13
一般信息:
我创建了自己的ListBox,它扩展了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
来获得两者,这不是我的目的。我只想要消息本身。
值为空。
参数名称:值
有没有办法只接收消息?
值为空。
这是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;
}
}
如您所见,在内部,该属性首先从基类 (Exception( 中检索字符串值,然后检查您是否在类的构造函数中传递了 parameterName。如果是这种情况,则 parameterName 将添加到字符串的第一部分并返回给调用方。
这就解释了为什么将两个字符串放在一起。这背后的逻辑在MS开发人员的脑海中。但是我发现它是正确的,Message
是您例外的完整文本。
可以编写类 ArgumentException 的简单扩展来实现 Message 与参数名称的分离
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;
}
}
}