?? Operator - Using in one liner condition
有人能解释一下下面的语句是如何操作的吗?我知道吗??如果第一个参数不为空,则返回该参数。但当我看到这个的时候,我有点困惑。在"file"变量后面。
1 | return file?.ImportStatus ?? ImportStatusEnum.Unknown; |
这是空传播和空合并运算符的组合。
在下列情况下将产生
file 为null —在这种情况下,不评估.ImportStatus ,?? 的左侧变为null ,或file 不是null ,但ImportStatus 是null ——在这种情况下,?? 的左侧也是null ,所以使用的是右侧。
如果
@DasBlinkEnlight是正确的,只是为了以不同的方式显示它,它可以这样写(按照评估的顺序):
1 2 3 4 5 | if (file == null) return ImportStatusEnum.Unknown; if (file.ImportStatus != null) return file.ImportStatus; else return ImportStatusEnum.Unknown; |
实际上,编译器将根据
1 | public ImportStatusEnum ImportStatus {get; set;} |
然后编译器将生成:
1 | return file != null ? file.ImportStatus : ImportStatusEnum.Unknown; |
这和
1 2 3 | if (file != null) return file.ImportStatus; return ImportStatusEnum.Unknown; |
如果属性可以为空,则如下所示:
1 2 3 | public ImportStatusEnum? ImportStatus {get; set;} //OR public Nullable<ImportStatusEnum> ImportStatus {get; set;} |
然后它将按照@dasbinkenlight和@garethb在他们的答案中指出的方式进行。