c# - 如何使用可空布尔参数返回可空短
问题描述
public static short? ToShortNullable(this bool? b)
{
return b.HasValue ? null : (b.Value==true : 1 ? 0);
}
我已经尝试了上述方法,但语法不满意,我想返回null
if b is null
、1
ifb is true
和0
if b is false
。
解决方案
你有两个问题:一个是你有从前到后的语法,:
另一个?
是b.Value==true : 1 ? 0
你有从前到后的逻辑。您尝试在b
确实有值时返回 null 并尝试从b
没有值时提取值。
试试这个:
public static short? ToShortNullable(this bool? b)
{
return b.HasValue ? (b.Value==true ? 1 : 0) : null;
}
因为b.Value == true
与b.Value
您可以简化为:
public static short? ToShortNullable(this bool? b)
{
return b.HasValue ? (b.Value ? 1 : 0) : null;
}
在 dotnetfiddle 上试试。这适用于 Roslyn 3.8 和 .NET 5 编译器。
在 .NET 4.7.2 上,编译器并不擅长推断条件运算符的类型。它看到一个分支似乎具有整数类型,而另一个分支具有null
文字并且不知道如何解决这些问题。您可以通过告诉它null
with的类型来帮助它(short?)null
。
推荐阅读
- ms-access - 如何远程连接到Access数据库?
- xcode - 将 SDK 设置为 12.1
- cmd - Azure Devops (VSTS) - 在控制台中以管理员身份启动构建代理(交互模式)
- javascript - 如何制作输出 html 的 wordpress 块?
- regex - 正则表达式:匹配第一次出现的:
- php - 如何在 swagger-lume 中描述请求中的数组数组
- vim - 如何将vim的输出重定向到终端?
- python - 熊猫:从 SettingWithCopyWarning 到 loc 和 iloc
- sql - Postgresql:间隔中每天的平均值
- node.js - 使用 websocket 连接到在 AWS 上运行的 Parity?