【发布时间】:2015-08-05 15:12:56
【问题描述】:
我目前正在处理一个由不同人编写的包含很多课程的朋友项目。在阅读代码时,我意识到这些人在特殊情况下抛出异常的方式不同。
只要说“开发者 1”做了:
public string this[int index]
{
get
{
if (index >= 0 && index < contents.Length)
return contents[index];
else
throw new IndexOutOfRangeException();
}
}
他检查索引,如果索引超出范围则抛出异常。
“开发者 2”改为:
public string this[int index]
{
get
{
return contents[index];
}
}
他不检查索引,如果索引超出范围,则让 CLR 抛出 IndexOutOfRangeException。
当然,两种方式都给出了相同的结果,但是在性能或其他方面有什么不同吗?还有什么时候使用的建议吗? 我更喜欢第一种方式,因为它更容易维护..
【问题讨论】:
-
堆栈将在异常中有所不同。 “已处理”的将在
throw站点停止堆栈,“未处理”的将显示有关您正在访问的集合的信息。它还取决于支持集合是什么,对于一个数组,它会抛出一个IndexOutOfBoundsException,但如果你正在访问一个字典,你会得到一个KeyNotFoundException。 -
这可能在programmers.stackexchange.com 上问得更好,因为这不是一个具体问题,而是更多关于代码设计的问题。
-
@user1666620 如果将其迁移给程序员,它将被关闭为duplicate of this question
-
@durron597 绝对正确,正确。无论哪种方式,这都是一个糟糕的问题。
标签: c# exception exception-handling coding-style