Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# - Try/Catch with predicate expression

Tags:

The following is an example taken from MSDN, try-catch (C# Reference)

catch (ArgumentException e) if (e.ParamName == "…") { } 

They also say

Using catch arguments is one way to filter for the exceptions you want to handle. You can also use a predicate expression that further examines the exception to decide whether to handle it. If the predicate expression returns false, then the search for a handler continues.

Exception filters are preferable to catching and rethrowing (explained below) because filters leave the stack unharmed. If a later handler dumps the stack, you can see where the exception originally came from, rather than just the last place it was rethrown. A common use of exception filter expressions is logging. You can create a predicate function that always returns false that also outputs to a log, you can log exceptions as they go by without having to handle them and rethrow.

My code:

static bool LogFunction(System.Exception ex) {     System.Console.WriteLine("Writing to logfile: {0}", ex.Message);     return false; }  static void Main(string[] args) {     try     {         throw new System.ArgumentException("The exception message...");     }     catch(System.Exception ex) if (LogFunction(ex))     {         System.Console.WriteLine("This will not be executed, ever!");     }     catch(System.ArgumentException ex)     {         // ....     } } 

Now, the compiler won't compile this (csc.exe), giving the following error message:

error CS1003: Syntax error, 'when' expected 

Edit: The compiler raises the error for the line

error CS1003: Syntax error, 'when' expected 

What am I doing wrong?

Thanks.

EDIT: I submitted feedback to MSDN pointing out the error in the documentation.

like image 652
jensa Avatar asked Nov 19 '15 19:11

jensa


People also ask

What C is used for?

C programming language is a machine-independent programming language that is mainly used to create many types of applications and operating systems such as Windows, and other complicated programs such as the Oracle database, Git, Python interpreter, and games and is considered a programming foundation in the process of ...

What is the full name of C?

In the real sense it has no meaning or full form. It was developed by Dennis Ritchie and Ken Thompson at AT&T bell Lab. First, they used to call it as B language then later they made some improvement into it and renamed it as C and its superscript as C++ which was invented by Dr. Stroustroupe.

Is C language easy?

C is a general-purpose language that most programmers learn before moving on to more complex languages. From Unix and Windows to Tic Tac Toe and Photoshop, several of the most commonly used applications today have been built on C. It is easy to learn because: A simple syntax with only 32 keywords.

Is C programming hard?

C is more difficult to learn than JavaScript, but it's a valuable skill to have because most programming languages are actually implemented in C. This is because C is a “machine-level” language. So learning it will teach you how a computer works and will actually make learning new languages in the future easier.


1 Answers

That's an error on the MSDN site. As the compiler suggests, you should use when instead of if.

like image 164
Jakub Lortz Avatar answered Nov 19 '22 16:11

Jakub Lortz