2015-11-19 11 views
22

Das folgende ist ein Beispiel aus MSDN, try-catch (C# Reference) genommenC# - Try/Catch mit Prädikat Ausdruck

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

Sie sagen auch,

Mit Fang Argumente eine Möglichkeit für die Ausnahmen zu filtern, die Sie behandeln möchten . Sie können auch einen Prädikatausdruck verwenden, der die Ausnahme weiter untersucht, um zu entscheiden, ob sie behandelt werden soll. Wenn der Prädikatausdruck false zurückgibt, wird die Suche nach einem Handler fortgesetzt.

Ausnahmefilter sind vorzuziehen, um sie zu fangen und erneut zu entfernen (siehe unten), da Filter den Stapel unversehrt verlassen. Wenn ein späterer Handler den Stapel ablegt, können Sie sehen, woher die Ausnahme ursprünglich kam, und nicht nur den letzten Ort, an dem sie erneut gestartet wurde. Eine häufige Verwendung von Ausnahmefilterausdrücken ist die Protokollierung. Sie können eine Prädikatfunktion erstellen, die immer false zurückgibt, die auch in ein Protokoll ausgegeben wird. Sie können Ausnahmen im Vorbeigehen protokollieren, ohne sie behandeln und erneut ausführen zu müssen.

Mein 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) 
    { 
     // .... 
    } 
} 

Nun wird der Compiler nicht dieses (csc.exe) kompilieren, wird folgende Fehlermeldung geben:

error CS1003: Syntax error, 'when' expected 

Edit: Der Compiler stellt sich die Fehler für die Zeile

error CS1003: Syntax error, 'when' expected 

Was mache ich falsch?

Danke.

BEARBEITEN: Ich habe Feedback an MSDN gesendet und auf den Fehler in der Dokumentation hingewiesen.

+2

Die Fangfilterlogik ist nur als Teil von VS2015 verfügbar. Ist das die Version, die Sie verwenden? – AWinkle

+2

Soweit ich mich erinnere, wenn mit "wenn" Schlüsselwort ersetzt wurde, versuchen Sie zu tauschen wenn zu – MajkeloDev

+0

Ich kompiliere über 'Entwickler Eingabeaufforderung für VS2015', also ja. Ich habe Visual Studio 2015 Community. – jensa

Antwort

22

Das ist ein Fehler auf der MSDN-Site. Wie der Compiler vorschlägt, sollten Sie when anstelle von if verwenden.

+0

Gibt es eine Sprachspezifikation für eine Version von C#, die diese Funktion hat? – recursive

+0

Danke, es hat funktioniert! Ich denke, jemand sollte es den MSDN-Leuten zeigen. – jensa

+0

@recursive Es scheint die neueste Version der Spezifikation ist für C# 5.0 –