similar questionを見た後、私は ヌル・伝播交換
if (attribute != null && attribute.Description == input)
は...以下のヌル伝播に、(ほぼ)同じ振る舞うだろう...次の式ならば思っていましたバリアント?
if (attribute?.Description == input)
これまでのところ、私は(何とかマイナー)の違い以下のみ決定することができる:場合input
で
- ない可能性が場合
input
に非NULL可能タイプ - のある行動、自身
null
だろう
私には何かが欠けていますか?または他の違いがあるの?
EDIT:最後に、私は最初のスニペットのために見つけた唯一のフェイルセーフ選択肢は、次のようになります。
if (attribute?.Description?.Equals(input) ?? false)
'attribute'は2番目のケースで1回だけ評価されるので、決して' NullReferenceException'を得ることはできません。最初のケースでは、 'attribute'が最初の条件の評価後で2番目の評価の前にnull以外の値に変更された場合、まだ例外が表示されます... –
'input'を' null'にするには、まずそれをチェックしてください。それでは、nullableをnull値ではない値と比較できるので、違いはありません。 –
@TimSchmelterそれは実際にあなたを助けることはありません。ポイントは、2つのスニペット*は、 'input'がnullのときに異なって振る舞います。そして、2つ目のスニペットでは、最初にそれをチェックすることはできません。 'input'が' null'になることが許されていれば、正しい結果を返すために、2番目のスニペットを最初のものに似たものにリファクタリングする必要があります。 – Servy