首页 > 解决方案 > 三元条件下的 C# Null 条件

问题描述

我正在重构一些旧代码并查看以下格式的内容:

Type = rec["IsFlagged"]?.ToString() == "True" ? "Yes" : "No"

如果 rec["IsFlagged"] 为空,这将不起作用,在这种情况下,我需要返回空。如果可能的话,如何重构以将代码保留在一行中?

我可以做类似的事情,但我想知道是否可以在一行中实现以下对代码的最小更改

    if (rec["IsFlagged"] != null)
    {
       return rec["IsFlagged"].ToString() == "True" ? "Yes" : "No"
    }
    else 
    {
        return null
    }

谢谢,

标签: c#nullnull-conditional-operator

解决方案


原始代码工作正常。

rec["IsFlagged"]?.ToString() == "True" ? "Yes" : "No"

这 ?运算符 before.ToString()防止在 null 时调用该方法。结果rec["IsFlagged"]?.ToString()将是null

然后,它比较null哪个"True"是假的(它们不相等)。

然后三元运算符评估"No"并将其分配给左值。

编辑所以,现在你想要 3 个可能的结果:“是”、“否”或 null。一个三元组只给你两个选择。有很多可能性,你的很好,除非你有多个地方做类似的事情。在这种情况下,您可以使用扩展方法:

public String CheckTrue(this object input) {
    return input?.ToString() == "True" ? "Yes" : "No"
}

然后在您的具体情况下:

return rec["IsFlagged"]?.CheckTrue()

另一种选择是使用多个三元运算符?

return rec["IsFlagged"]==null ? null : (rec["IsFlagged"].ToString() == "True" ? "Yes" : "No");

推荐阅读