5

方括号的 C# 参考说:方括号 [] 用于数组、索引器和属性。它们也可以与指针一起使用。(它还说,对于数组)如果数组索引超出范围,则会引发异常。

所以当你在数组以外的东西上使用方括号时,你怎么知道可能会抛出什么异常?

对于字典(例如),如果您使用诸如Dictionary.TryGetValue之类的访问器方法,则可以轻松查找该方法可能引发的异常,但方括号 [] 的 C# 参考仅表示它可能会为 index out of数组上的范围。

因此,如果您想对某些数据类型使用方括号,您可以在哪里查找该数据类型可能会引发哪些异常?

我尝试访问字典中不存在的成员,只是为了看看会发生什么,然后我得到了 KeyNotFoundException。我知道你也可以得到 NullReferenceException。这是在哪里记录的?完整的清单是什么?

4

4 回答 4

4

它记录在每个实现中。没有一个详尽的列表,因为运算符可能会被重载,因此理论上可能会引发任何异常。操作员通常被记录为Item财产。

以下是有关特定用途的一些文档:

Dictionary.Item

数组项

但是,您不应该需要一份关于可以抛出什么的详尽清单。捕获异常通常有以下两个原因之一:要么您想对其做点什么(比如前几天TryParse捕获异常是捕获错误日期格式的最简单方法),要么您只想注意发生了异常并记录它,在这种情况下,您通常会重新处理实际的异常。

捕获特定异常对前一种情况有好处。例如,如果您捕获 aNullReferenceException它通常是重新抛出一个不同的异常,该异常指示哪个引用为空(因为这不是 stock 的一部分NullReferenceException)

在后一种情况下,Exception如果您只想记录并重新抛出,则捕获泛型很好,因为您可能无能为力。

于 2013-02-20T22:46:04.753 回答
4

[] 运算符应用于 Dictionary<TKey, TValue> 或 List<T> 时,它会调用实例的indexer。索引器是带有参数的特殊属性,通常称为Item.

于 2013-02-20T22:46:23.460 回答
1

当用于访问数组时,它可以抛出一个IndexOutOfRangeException.

当用于属性时,它根本不会抛出任何异常,因为任何错误都会在编译时出现。

当用于访问索引器时,它可以抛出任何异常。索引器可以以任何你想要的方式实现,并抛出它喜欢的任何异常。

于 2013-02-20T22:50:20.927 回答
1

一般来说,方括号本质上可以让您访问索引属性 - 因此,无论您正在使用的对象的属性索引器中提到什么错误。

对于数组,可能是索引超出范围,对于DataRow,可能是未找到列等等。

于 2013-02-20T22:45:29.993 回答