== Why is this an issue?

The requirement for a final ``++default++`` clause is defensive programming. The clause should either take appropriate action, or contain a suitable comment as to why no action is taken. Even when the ``++switch++`` covers all current values of an ``++enum++``, a ``++default++`` case should still be used because there is no guarantee that the ``++enum++`` won't be extended.

=== Noncompliant code example

[source,csharp]
----
int foo = 42;
switch (foo) // Noncompliant
{
  case 0:
    Console.WriteLine("foo = 0");
    break;
  case 42:
    Console.WriteLine("foo = 42");
    break;
}
----

=== Compliant solution

[source,csharp]
----
int foo = 42;
switch (foo) // Compliant
{
  case 0:
    Console.WriteLine("foo = 0");
    break;
  case 42:
    Console.WriteLine("foo = 42");
    break;
  default:
    throw new InvalidOperationException("Unexpected value foo = " + foo);
}
----

include::../see.adoc[]

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

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

include::../message.adoc[]

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

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

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