== Why is this an issue?

Throwing such general exceptions as ``++Exception++``, ``++SystemException++``, ``++ApplicationException++``, ``++IndexOutOfRangeException++``, ``++NullReferenceException++``, ``++OutOfMemoryException++`` and ``++ExecutionEngineException++`` prevents calling methods from handling true, system-generated exceptions differently than application-generated errors. 

=== Noncompliant code example

[source,csharp]
----
public void DoSomething(object obj)
{
  if (obj == null)
  {
    throw new NullReferenceException("obj");  // Noncompliant
  }
  // ...
}
----

=== Compliant solution

[source,csharp]
----
public void DoSomething(object obj)
{
  if (obj == null)
  {
    throw new ArgumentNullException("obj");
  }
  // ...
}
----

include::../see.adoc[]

ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

=== Message

"XXX" should not be thrown by user code.


'''
== Comments And Links
(visible only on this page)

=== on 4 Feb 2015, 14:28:31 Ann Campbell wrote:
Gendarme: DoNotThrowReservedExceptionRule

=== on 11 May 2015, 11:52:58 Dinesh Bolkensteyn wrote:
\[~ann.campbell.2] Replacing "using" by "throwing" in the description - is catching also using?

=== on 11 May 2015, 12:03:32 Dinesh Bolkensteyn wrote:
\[~ann.campbell.2] I've also applied the C# style to the code example. This rule LGTM now.

=== on 11 May 2015, 13:51:45 Ann Campbell wrote:
Agreed [~dinesh.bolkensteyn] "throwing" is better than "using" here.

include::../comments-and-links.adoc[]

endif::env-github,rspecator-view[]
