IsSaveNew
是bool?
的类型
CoverLetterId
的类型为int?
if (coverLetter.IsSaveNew ?? true || coverLetter.CoverLetterId == null)
coverLetter.CoverLetterId == null
。此声明在visual studio(2012)中标记为无法访问。
但如果IsSaveNew
为假,则会达到第二个条件。为什么Visual Studio这么说?
答案 0 :(得分:6)
看起来像是运营商优先问题。您的陈述评估为:
if (coverLetter.IsSaveNew ?? (true || coverLetter.CoverLetterId == null))
因此,||
运算符的右侧操作数永远不会被计算,因为它的左侧操作数是文字true
。
您可以添加括号来解决此问题:
if ((coverLetter.IsSaveNew ?? true) || coverLetter.CoverLetterId == null)
答案 1 :(得分:3)
查看7.2.1 Operator precedence and associativity
您的true || coverLetter.CoverLetterId == null
先行。如果您希望coverLetter.IsSaveNew ?? true
首先使用,请使用括号。
像;
if ((coverLetter.IsSaveNew ?? true) || coverLetter.CoverLetterId == null)
但仍然是视觉工作室说它无法到达
这意味着(可能)您的coverLetter.IsSaveNew ?? true
会返回true
,这就是您的第二个操作数无法评估的原因。
如果第一个操作数的计算结果为true,则第二个操作数不是 评价即可。如果第一个操作数的计算结果为false,则第二个操作数 operator确定OR表达式是否作为整体求值 是真还是假。
答案 2 :(得分:1)
你可以把封面信.IsSaveNew ??在括号中使用true 来解决此问题。 像 -
if ((coverLetter.IsSaveNew ?? true) || coverLetter.CoverLetterId == null)
答案 3 :(得分:0)
你最好使用GetValueOrDefault作为??部分将始终评估为真