bra*_*mus 1 c# exception-handling
在下面的示例代码中,我将获取字符串列表并将它们连接到分隔的字符串.当我使用带有空列表的setter时会出现问题.ToString方法抛出ArgumentOutOfRangeException,因为第二个参数是-1.
如何处理这样的条件(getter/setter中抛出的异常)?
我不喜欢setter抛出异常的事实,因为调用者不知道类的内部,因此不应该处理(甚至知道如何)异常.捕获getter/setter中的所有异常并安静地处理它们听起来也是一个坏主意,因为调用者不会知道getter/setter失败.
//I realize that this isn't the best code but I wanted to produce an example
//to demonstrate my question.
private string theStringVariable;
const string DELIMITER = ",";
public IList<string> StringList
{
set
{
StringBuilder stringBuilder = new StringBuilder();
foreach(string entry in value)
{
stringBuilder.Append(entry);
stringBuilder.Append(DELIMITER);
}
theStringVariable = stringBuilder.ToString(0, stringBuilder.Length - 1);
}
}
Run Code Online (Sandbox Code Playgroud)
您应该检查潜在的常见错误条件,并在前面抛出您自己的异常(在StringBuilder错误之前),并提供有意义的错误消息.
在您的情况下,如果使用空字符串列表调用setter,您很可能希望使用某种形式的ArgumentException.这里的关键是你的异常可以说"参数包含一个空集合"而不是"索引越界",这将使调用者立即理解为什么他们在调用中遇到"真正的"问题.
在旁注:在你发布的代码的情况下 - 我也考虑将其作为方法而不是属性.你在这个属性设置器中做了很多"工作",这有些出乎意料.通过使这个方法,你将给用户一个线索,在这个属性中发生一些"处理"......
| 归档时间: |
|
| 查看次数: |
1042 次 |
| 最近记录: |