Visual Studio Team System
Do not raise reserved exception types

TypeName

DoNotRaiseReservedExceptionTypes

CheckId

CA2201

Category

Microsoft.Usage

Breaking Change

Breaking

Cause

A method raises an exception type that is too general or that is reserved by the runtime.

Rule Description

The following exception types are too general to provide sufficient information to the user:

The following exception types are reserved and should be thrown only by the common language runtime:

How to Fix Violations

To fix a violation of this rule, change the type of the thrown exception to a specific type that is not one of the reserved types.

When to Exclude Warnings

Do not exclude a warning from this rule.

Related Rules

Do not catch general exception types

Do not raise exceptions in filter blocks

Tags :


Community Content

David M. Kean - MSFT
FAQ: Why do some sources recommend throwing ApplicationException while Visual Studio Code Analysis (FxCop) does not?
See the following post on the Visual Studio Code Analysis blog:
http://blogs.msdn.com/fxcop/archive/2006/04/05/569569.aspx
Tags :

David M. Kean - MSFT
FAQ: Why does FxCop warn against catch(Exception)?

See the following post on the Visual Studio Code Analysis blog:
http://blogs.msdn.com/fxcop/archive/2006/06/14/631923.aspx

Tags :

Dour High Arch
Do not throw general exception types

Throwing a general exception type such as Exception or SystemException in a library or Framework forces consumers to catch all exceptions, including unknown exceptions that they do not know how to handle.

Instead, either throw a more derived type that already exists in the Framework, or create your own type that derives from Exception.

The following list examples of when you should throw specific exceptions:

When validating a parameter (including the value parameter in the set accessor of a property) that:

  • Is a null reference (Nothing in Visual Basic)
    throw System.ArgumentNullException.
  • Is outside of the allowable range of values (such as an index for a Collection/List)
    throw System.ArgumentOutOfRangeException.
  • Is an invalid enum value
    throw System.ComponentModel.InvalidEnumArgumentException.
  • Contains a format that not meet the parameter specifications of a method (such as the format string for ToString(String))
    throw System.FormatException.
  • Is otherwise invalid
    throw System.ArgumentException.

When an operation:

  • Is invalid for an object's current state
    throw System.InvalidOperationException.
  • Is performed on an object that has been disposed
    throw System.ObjectDisposedException.
  • Is not supported (such as in an overridden Stream.Write in a Stream opened for reading)
    throw System.NotSupportedException.
  • Would result in an overflow (such as in a explicit cast operator overload)
    throw System.OverflowException.

For all other situations, consider creating your own type that derives from Exception and throw that. For more information, see Krzysztof Cwalina's blog How to Design Exception Hierarchies (http://blogs.msdn.com/kcwalina/archive/2007/01/30/ExceptionHierarchies.aspx)

Tags :

Lukasz Anforowicz
Okay to throw OutOfMemoryException in some circumstances

You probably want to throw OutOfMemoryException when PInvoked native code returns ERROR_OUTOFMEMORY or a similar result. I discussed this with FxCop authors and they say that it is okay to suppress the rule in such circumstances.

Tags :

Page view tracker