ParentCommentId = lac.ParentCommentId ?? lac.ParentCommentId.Value,
我想知道为什么 ??在这种情况下操作数不起作用。
当您使用 null-coalescing operator ?? 时,它是一组简短步骤的简写,一般意义上的步骤执行以下操作
-
lac.ParentCommentId 可以是 null 吗?
是 -> 继续
否 -> 给出一个编译器错误,说明您不能在不能为空的东西上使用 ?? 运算符,因为它是 null-coalescing operator。
-
是lac.ParentCommentIdnull吗?
是 -> 继续
否 -> 将ParentCommentId 的值设置为lac.ParentCommentId 的值,如果它们是相同的类型。
-
将ParentCommentId 的值设置为lac.ParentCommentId.Value 的值,如果它们是相同的类型。
当您分解 ?? 运算符的作用时,您会发现它在第 2 步附近遇到了问题。
您想要是当lac.ParentCommentId 有值时,将ParentCommentId 设置为lac.ParentCommentId.Value。
但是,当您使用 ?? 时,这不是您正在做的事情。相反,您似乎在说“当lac.ParentCommentId 有值时,将ParentCommentId 设置为lac.ParentCommentId”。
有一种方法可以解决这个问题,实际上非常简单,因为lac.ParentCommentId 已经是一个可以为空的值,我们可以简单地使用
ParentCommentId = lac.ParentCommentId ?? AlternativeValue
如果我们还认为null 是ParentCommentId 的可接受值,我们实际上可以进一步简化它以获得更优雅的解决方案和使用:
ParentCommentId = lac.ParentCommentId
编辑:以下内容仅适用于 LINQ-to-Objects 而不实体框架。它仍然作为? null coelescing 运算符的附加信息。感谢Ivan Stoev 指出这一点!
如果lac.ParentCommentId.Value 是一个可以为空的值,你可以改用这个:
ParentCommentId = lac?.ParentCommentId.Value ?? AlternativeValue,
它的作用是检查 lac ParentCommentId 或 Value 中的 ANY 是否为 null,以及其中的 ANY 是否为 null , 使用替代值。