不带参数的异常消息

问题描述 投票:1回答:1

一般信息:

我创建了自己的扩展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获得了两者,但这不是我的目的。我只想要消息本身。

值为空。

参数名称:值

是否有仅接收消息的方法?

值为空。

c# exception listbox
1个回答
1
投票
这是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; } } }

© www.soinside.com 2019 - 2024. All rights reserved.