誰かが以下のステートメントがどのように動作するかを説明することはできますか?私はそれを知っている??演算子は、NULLでない場合は最初の引数を返します。しかし、私が見たときに少し混乱しましたか? 'file'変数に続いて。??オペレーター - 1つのライナー条件で使用する
return file?.ImportStatus ?? ImportStatusEnum.Unknown;
誰かが以下のステートメントがどのように動作するかを説明することはできますか?私はそれを知っている??演算子は、NULLでない場合は最初の引数を返します。しかし、私が見たときに少し混乱しましたか? 'file'変数に続いて。??オペレーター - 1つのライナー条件で使用する
return file?.ImportStatus ?? ImportStatusEnum.Unknown;
これはnull propagationとヌルの組み合わせ演算子を合体です。これは次の場合にImportStatusEnum.Unknown
を生成する
は: - この場合、.ImportStatus
が評価されていない、と??
の左側がnull
なる、または
file
である
file
null
ありますnull
ではありませんが、ImportStatus
はnull
です - この場合、の左側3210もnull
であるため、右側が使用されます。どちらfile
もそのImportStatus
がnull
している場合は、その後、file.ImportStatus
の値が式全体の結果として使用されます。
@dasblinkenlightはちょうどそれに別の道を示すために、それが(評価の順で)次のように書くことができ、正しいです:
if (file == null) return ImportStatusEnum.Unknown;
if (file.ImportStatus != null)
return file.ImportStatus;
else
return ImportStatusEnum.Unknown;
@ kurakura88 - いいえ、ガレブのコードは正しいです。 – Enigmativity
OK、私の間違いは、評価はまだ次の?明らかに。 – kurakura88
実際には、コンパイラがするかどうかに基づいて異なるコードを生成します。 ImportStatus
はがNULL可能ですです。それはので、このように、NULL可能でない場合:プロパティはNULL可能ある場合
return file != null ? file.ImportStatus : ImportStatusEnum.Unknown;
if (file != null)
return file.ImportStatus;
return ImportStatusEnum.Unknown;
と同じである:
public ImportStatusEnum ImportStatus {get; set;}
、コンパイラはこれを生成します。ので、このように:
public ImportStatusEnum? ImportStatus {get; set;}
//OR
public Nullable<ImportStatusEnum> ImportStatus {get; set;}
@dasblinkenlightと@garethbが回答に示したことを行います。
これは重複した回答ではない伝播演算子が記述されているため、重複しません。 – dasblinkenlight