Poniżej jest przykład wzięty z MSDN, try-catch (C# Reference)C# - try/catch z ekspresją kwantyfikatorów
catch (ArgumentException e) if (e.ParamName == "…")
{
}
Mówią także
Używanie argumentów połów jest jeden sposób, aby filtrować dla wyjątków, które chcesz obsługiwać . Możesz także użyć wyrażenia predykatu, które dodatkowo bada wyjątek, aby zdecydować, czy go obsłużyć. Jeśli wyrażenie predykatu zwraca wartość false, to wyszukiwanie procedury obsługi jest kontynuowane.
Filtry wyjątków są lepsze od łapania i ponownego rzucania (wyjaśnione poniżej), ponieważ filtry pozostawiają stos bez szwanku. Jeśli późniejszy handler zrzuca stos, możesz zobaczyć, skąd pochodzi wyjątek, a nie tylko ostatnie miejsce, w którym został ponownie wydany. Najczęstszym zastosowaniem wyrażeń filtru wyjątku jest rejestrowanie. Możesz utworzyć funkcję predykatu, która zawsze zwraca wartość false, która również generuje logi, możesz rejestrować wyjątki podczas ich przechodzenia, bez konieczności ich obsługi i ponownego rzucania.
Mój kod:
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)
{
// ....
}
}
Teraz, kompilator nie będzie skompilować ten (csc.exe), podając następujący komunikat o błędzie:
error CS1003: Syntax error, 'when' expected
EDIT: Kompilator podnosi błąd dla linii
error CS1003: Syntax error, 'when' expected
Co robię źle?
Dzięki.
EDYCJA: Prześlij opinię do MSDN, wskazując błąd w dokumentacji.
Logika filtru catch dostępna jest tylko jako część VS2015. Czy to jest wersja, z której korzystasz? – AWinkle
O ile pamiętam, jeśli zostało ono zastąpione słowem kluczowym "kiedy", staram się zamienić, jeśli podczas – MajkeloDev
kompiluję za pomocą "Wiersza poleceń programisty dla VS2015", więc tak. Mam społeczność Visual Studio 2015. – jensa