首页 > 解决方案 > 如何使用可空布尔参数返回可空短

问题描述

public static short? ToShortNullable(this bool? b)
{       
     return b.HasValue ? null : (b.Value==true : 1 ? 0);
}

我已经尝试了上述方法,但语法不满意,我想返回nullif b is null1ifb is true0if b is false

标签: c#

解决方案


你有两个问题:一个是你有从前到后的语法,:另一个?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 == trueb.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文字并且不知道如何解决这些问题。您可以通过告诉它nullwith的类型来帮助它(short?)null


推荐阅读