Il seguente è un esempio tratto dalla MSDN, try-catch (C# Reference)C# - try/catch con l'espressione del predicato
catch (ArgumentException e) if (e.ParamName == "…")
{
}
Dicono anche
Utilizzando argomenti di cattura è un modo per filtrare le eccezioni che si desidera gestire . È inoltre possibile utilizzare un'espressione di predicato che esamina ulteriormente l'eccezione per decidere se gestirla. Se l'espressione del predicato restituisce false, la ricerca di un gestore continua.
I filtri di eccezione sono preferibili alla cattura e al rethrowing (spiegato di seguito) perché i filtri lasciano lo stack illeso. Se un gestore successivo scarica lo stack, puoi vedere da dove proviene l'eccezione, piuttosto che l'ultimo posto in cui è stato riscritto. Un uso comune delle espressioni del filtro delle eccezioni è la registrazione. È possibile creare una funzione di predicato che restituisce sempre false che vengono anche esportate in un log, è possibile registrare le eccezioni mentre procedono senza doverle gestire e retrocedere.
Il mio codice:
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)
{
// ....
}
}
Ora, il compilatore non compilare questo (csc.exe), dando il seguente messaggio di errore:
error CS1003: Syntax error, 'when' expected
Edit: Il compilatore genera il errore per la linea
error CS1003: Syntax error, 'when' expected
Cosa sto facendo male?
Grazie.
MODIFICA: Ho inviato un feedback a MSDN indicando l'errore nella documentazione.
La logica del filtro di cattura è disponibile solo come parte di VS2015. È questa la versione che stai usando? – AWinkle
Per quanto mi ricordo, se è stato sostituito con la parola chiave 'when' quando cerco di scambiare se a quando – MajkeloDev
sto compilando tramite 'Prompt dei comandi dello sviluppatore per VS2015', quindi sì. Ho una community di Visual Studio 2015. – jensa