c# - 三元条件下的 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
}
谢谢,
解决方案
原始代码工作正常。
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");
推荐阅读
- flutter - 在 Flutter Desktop 中将监视器输出发送到 LCD 投影仪
- angular - android上的Nativescript底部导航未按预期呈现
- vb.net - 在 vb.net 中调用包中的 Oracle 函数
- ansible - 添加特定行的文本结尾
- windows - 尝试在 Windows 上执行 c++ 时出现本机命令行错误(通过 MinGW 编译)
- python - 根据其他列值/ Pandas -Python 在数据框中创建 ID 列
- cloud-foundry - 禁用 Cloud Foundry 部署的应用程序的 iframe 嵌入
- android - 安卓重复apk
- controls - 如何调整 PID 输出限制器
- c++ - 如何在水平布局中对齐 QPushButton 和 QComboBox?