Reputation: 4869
In my indexed property I check whether the index is out of bounds or not. If it is, I throw an IndexOutOfBoundsException
.
When I run the Code Analyst (in VS12) it complains with CA1065: Unexpected exception in unexpected location.
Referring to the description of CA1065, only
System.InvalidOperationException
System.NotSupportedException
System.ArgumentException
KeyNotFoundException
are allowed in an indexed getter.
Throwing IndexOutOfBoundsException
seems natural to me, so what is the reasoning here?
(And yes, I know I can turn the warning off, I just want to know the reasoning)
Upvotes: 5
Views: 899
Reputation: 10658
See MSDN: IndexOutOfRangeException is system exception and reserved for accessing array elements. It is thrown by some MSIL instructions: ldelem., ldelema, stelem..
For developing classes use ArgumentOutOfRangeException.
Upvotes: 6
Reputation: 1063774
A lot of classes use ArgumentOutOfRangeException
for this, including List<T>
. This is a subclass of ArgumentException
so should satisfy the rule. I guess you could argue that for a vector etc accessed directly, there isn't actually a method call (it is a dedicated opcode - ldelem*
), so the index in that case isn't actually an argument. Seems a weak argument, though.
Upvotes: 8