null許容型と安全なキャストの使用(as
例外をスローしません):
_logger.LogInformation("Wrote file at {0}", (streamWriter.BaseStream as FileStream)?.Name);
?
左側の式の結果がそうでない場合にのみプロパティにアクセスしますnull
。そうでない場合は、戻ります(に評価されます)null
(と同等ですE is T ? (T)(E) : (T)null
)。
null
必要に応じて、キャスト結果を次のように確認できます。
var fs = streamWriter.BaseStream as FileStream;
if (fs != null)
{
_logger.LogInformation("Wrote file at {0}", fs.Name);
}
しかし、それはあなたが必要とするよりも多くのコードです。C#7+で上記の例を書くためのより現代的な方法は、is
演算子を使用することです。
if (streamWriter.BaseStream is FileStream fs)
{
_logger.LogInformation("Wrote report file at {0}", fs.Name);
}
これには、キャストを実行できなかった場合にログ呼び出しがまったく発生しないという追加の利点があります。これは、を使用している場合fs
は実際には発生しないためです。式全体がtrueまたはfalseのいずれかに評価されますが、決して評価されません。null
is
is
null