0

C# 6 では、次のコードを作成できます。

try  { }
catch (Exception e) when (e is NullReferenceException) { }
catch (Exception e) when (e is UnauthorizedAccessException) { }

しかし、上記のコードと以下の古い C# コードの違いは何でしょうか?

try  { }
catch (NullReferenceExceptione e) { }
catch (UnauthorizedAccessExceptione e) { }

私にとっては、古いバージョンが最も短く、最も使いやすいように見えます。

4

2 に答える 2

5

しかし、上記のコードと以下の古い C# コードの違いは何でしょうか?

eException派生型ではなく、キャッチの本体の型になります。

私にとっては、古いバージョンが最も短く、最も使いやすいように見えます。

それからそれを使用します。


ここでのキーワードの要点は、式が特定の派生型であるかどうかに基づいて式をフィルタリングできるだけwhenでなく、任意のブール式を記述して一致するかどうかを判断できることです。

于 2016-01-26T17:32:59.653 に答える
2

eあなたの例では、キャッチでの入力以外にはあまりありません。

キーワードは、次のような単純な true / false チェック用に設計されています。

try 
{
  // Do stuff
} 
catch (Exception e) when (
  (DateTime.Now.DayOfWeek == DayOfWeek.Saturday)
  || (DateTime.Now.DayOfWeek == DayOfWeek.Sunday)) {
  // Swallow
}

(コードソース)

于 2016-01-26T17:35:23.640 に答える