以下是MSDN, try-catch (C# Reference)C# - 嘗試/謂語表達趕上
catch (ArgumentException e) if (e.ParamName == "…")
{
}
採取了一個例子,他們也說
使用捕捉參數是一種方式來過濾要處理的異常。您還可以使用謂詞表達式來進一步檢查異常以決定是否處理它。如果謂詞表達式返回false,則繼續搜索處理程序。
異常過濾器優於捕捉和重新拋出(下面解釋),因爲過濾器不會損壞堆棧。如果稍後的處理程序轉儲堆棧,您可以看到異常最初來自哪裏,而不僅僅是最後一次拋出的地方。異常過濾器表達式的常見用法是日誌記錄。您可以創建一個總是返回false的謂詞函數,該函數也會輸出到日誌中,您可以在異常發生時記錄它們,而無需處理它們並重新拋出。
我的代碼:
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)
{
// ....
}
}
現在,編譯器不會編譯這個(CSC.EXE),給予以下錯誤信息:
error CS1003: Syntax error, 'when' expected
編輯:編譯器提高了錯誤行
error CS1003: Syntax error, 'when' expected
我在做什麼錯?
謝謝。
編輯:我向MSDN提交了反饋,指出文檔中的錯誤。
捕獲過濾器邏輯僅作爲VS2015的一部分提供。這是你使用的版本嗎? – AWinkle
據我記得,如果被替換'時'關鍵字嘗試交換,如果到 – MajkeloDev
我正在編譯通過'開發人員命令提示符VS2015',所以是的。我有Visual Studio 2015社區。 – jensa