Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Will CLR handle both CLS-Complaint and non-CLS complaint exceptions?

Just for my clarification:

Can I throw both CLS-compliant and non-CLS compliant exceptions in .NET Framework? I am using C# 3.0.

When I catch an exception

catch(Exception ex)
{

}
  • Will it catch only CLS-compliant exceptions?
  • What is the use of RuntimeWrappedException class (can I have a simple example?).
like image 275
user184805 Avatar asked Oct 07 '09 11:10

user184805


People also ask

What is CLS compliant in C#?

Net classes irrespective of the language they are implemented, then your code should conform to the CLS [Common Language Specification]. This means that your class should only expose features that are common across all . Net languages.


1 Answers

  1. Yes, you can throw non-CLS compliant exceptions in the .NET Framework, as long as you use a language that allows it, e.g. C++.
  2. No, you cannot throw non-CLS compliant exceptions in C#.
  3. No, it will catch all exceptions, since any non-CLS compliant exception will be wrapped in a RuntimeWrappedException, which derives from Exception.
  4. You do not throw a RuntimeWrappedException, the CLR does. MSDN has a detailed description, which I quote here:

    Some languages, such as C++, allow you to throw exceptions of any managed type. Other languages, such as Microsoft C# and Visual Basic, require that every thrown exception be derived from the Exception class. To maintain compatibility between languages, the common language runtime (CLR) wraps objects that do not derive from Exception in a RuntimeWrappedException object.

If you want to treat CLS and non-CLS exceptions differently, just catch them in the right order:

try {
    // some code
catch(RuntimeWrappedException ex) {
    // non-CLS exceptions
catch(Exception ex) {
    // CLS exceptions
}
like image 145
Christian Hayter Avatar answered Sep 28 '22 00:09

Christian Hayter