?? 操作员 - 在一个衬管条件下使用

jen*_*fad 1 c#

有人可以解释下面的陈述如何运作.我知道?? 如果第一个参数不为null,则返回第一个参数.但是当我看到它时,我有点困惑?跟随'file'变量.

return file?.ImportStatus ?? ImportStatusEnum.Unknown;
Run Code Online (Sandbox Code Playgroud)

das*_*ght 9

这是null传播null coalesce运算符的组合.

它将ImportStatusEnum.Unknown在以下情况下产生:

  • filenull - 在这种情况下,.ImportStatus不评估,左侧??变为null,或
  • file不是null,但ImportStatus就是null -在这种情况下,左侧??也是null,所以右侧被使用.

如果既不是file也不ImportStatusnull,那么file.ImportStatus将使用值作为整体表达的结果.


gar*_*thb 5

@dasblinkenlight是正确的,只是为了以不同的方式显示它,它可以这样写(按评估顺序):

if (file == null) return ImportStatusEnum.Unknown;
if (file.ImportStatus  != null) 
    return file.ImportStatus;
else 
    return ImportStatusEnum.Unknown;
Run Code Online (Sandbox Code Playgroud)