2012 年 5 月にあなたが質問したとき、私はあなたが提供した try ... catch よりも簡単な解決策を見つけられませんでした。唯一の代替手段 - 「if」または「?」を使用して各部分を null に対してチェックする 見栄えが悪い(ただし、少し速い可能性があります)。
どちらかを書く必要がありました:
path = HttpContext!=null
? (HttpContext.Current!=null
? (HttpContext.Current.Request!=null
?(HttpContext.Current.Request.ApplicationPath!=null
? HttpContext.Current.Request.ApplicationPath
: null)
: null)
: null)
: null;
また:
if (HttpContext == null || HttpContext.Current == null
|| HttpContext.Current.Request == null
|| HttpContext.Current.Request.ApplicationPath == null)
path = null;
else
path = HttpContext.Current.Request.ApplicationPath;
どちらも例外処理なしで実行しています。どちらも「ショートカット」を使用して、null 値が見つかった場合にチェックを中止していることに注意してください。
更新 (2017 年 12 月): C# バージョン 6
以降、いわゆるElvis
-Operator (null 合体演算子?.
とも呼ばれx?[i]
、配列用) と呼ばれるより良い解決策が利用可能になりました。これを使用できます。上記の例
path = HttpContext!=null
? (HttpContext.Current!=null
? (HttpContext.Current.Request!=null
?(HttpContext.Current.Request.ApplicationPath!=null
? HttpContext.Current.Request.ApplicationPath
: null)
: null)
: null)
: null;
この方法ではるかに見栄えがします:
path = HttpContext?.Current?.Request?.ApplicationPath;
これはまったく同じことを行い、「単なる」構文糖よりもはるかに多くのIMHOです。appended と組み合わせると、他の値に?? value
簡単に置き換えることができます。null
path = (HttpContext?.Current?.Request?.ApplicationPath) ?? "";
これにより、path
null 以外の値を取得できない場合、変数は空になります。