方括号的C#引用说:方括号[]用于数组,索引器和属性。它们也可以与指针一起使用。 (它也说,对于数组)如果数组索引超出范围,则抛出异常。
所以当你在数组以外的其他东西上使用方括号时,你怎么知道可能抛出什么异常?
对于Dictionary(例如),如果使用诸如Dictionary.TryGetValue之类的访问器方法,则可以轻松查找该方法可能抛出的异常,但C# reference for square brackets []仅表示它可能会抛出异常索引超出数组范围。
因此,如果您想对某些数据类型使用方括号,您可以在哪里查找可能为该数据类型抛出哪些异常?
我尝试访问一个不存在的Dictionary成员,只是为了看看会发生什么,我得到了KeyNotFoundException。我知道你也可以得到NullReferenceException。这记录在哪里?什么是完整的清单?
答案 0 :(得分:4)
每个实现都记录了它。由于运算符可能过载,因此没有详尽的列表,因此可以抛出任何异常。操作符通常记录为Item
属性。
以下是一些有关特定用途的文档:
但是,您不应该需要详细列出可以被抛出的内容。异常通常是由于以下两个原因之一而引起的:要么你想要做关于它的事情(比如捕获异常时TryParse
之前的日子是捕获错误日期格式的最简单方法)或者你只是想注意发生异常并记录它,在这种情况下你通常会重新发现实际的异常。
捕获特定的例外情况对前一种情况有利。例如,如果您捕获NullReferenceException
,通常会重新抛出另一个异常,指示哪个引用为空(因为这不是库存NullReferenceException)
的一部分。
在后一种情况下,如果您只想记录并重新抛出,则捕获通用Exception
就可以了,因为您可能无法对其进行任何其他操作。
答案 1 :(得分:4)
当[] Operator应用于词典< TKey,TValue>或者列表< T>,它调用实例的indexer。索引器是带参数的特殊属性,通常称为Item
。
Dictionary<TKey, TValue>.Item Property
ArgumentNullException - key 是null
KeyNotFoundException - 检索该属性,并且集合中不存在 key 。
List<T>.Item Property
ArgumentOutOfRangeException - index 小于0 - 或 - index 等于或大于 Count 。
...
答案 2 :(得分:1)
一般来说,方括号基本上允许您访问索引属性 - 因此,您正在使用的对象的属性索引器中提到了任何错误。
对于数组,它可能是索引超出范围,对于DataRow,它可能是未找到列等等。
答案 3 :(得分:1)
当用于访问数组时,它可以抛出IndexOutOfRangeException
。
当用于attribue时,它根本不会抛出任何异常,因为编译时会出现任何错误。
当用于访问索引器时,它可以抛出任何异常。索引器可以以您想要的任何方式实现,并抛出它喜欢的任何异常。