Csharp/C#教程:隐式转换Null-Coalescing运算符结果分享


隐式转换Null-Coalescing运算符结果

通过以下对C#中的空合并运算符(??)的理解。

int? input = -10; int result = input ?? 10;//Case - I //is same as: int result = input == null? input : 10; // Case - II 

而根据定义和用法,案例I和案例II是相同的。

令人惊讶的是,在Case-I编译器能够隐式转换int? to case而在Case-II中它显示错误:’错误1无法隐式转换类型’int?’ ‘int’“

关于null-coalescing运算符,我错过了什么?

谢谢你的关注。

要使第二种情况适用于三元运算符,您可以使用以下代码:

 int result = input != null ? input.Value : 10; 

Nullable类型的Value属性返回T值(在本例中为int )。

另一种选择是使用Nullable.HasValue

 int result = input.HasValue ? input.Value : 10; 

myNullableInt != null构造只是上述HasValue调用的语法糖。

您在null合并运算符中观察到的这种行为?? 是一种文档化的语言function,有关详细信息,请参阅C#4.0语言规范的第7.13节。

表达式的类型a ?? b取决于操作数上可用的隐式转换。 按优先顺序排列,类型为?? b是A0,A或B,其中A是a的类型(假设a具有类型),B是b的类型(假设b具有类型),并且A0是A的基础类型,如果A是可以为空的类型,否则为A. 具体来说,一个?? b处理如下:

有关条件运算符a ? b : c原因,请参见第7.14节a ? b : c a ? b : c工作方式不同。

下载规范,以便在闲暇时完整阅读。

 int result = input == null ? input : 10; 

在第二种情况下, 你的情况好坏参半 – 你可能意味着

 int result = input != null ? input : 10; 

现在这不会编译,因为与三元运算符一起使用的两个类型必须完全相同(并且int?int ) – 您可以使用简单的强制转换作为解决方案:

 int result = input != null ? (int)input : 10; 

更简洁的解释:

上述就是C#学习教程:隐式转换Null-Coalescing运算符结果分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 int? NULL_Int = 1; int NORM_Int = 2; NULL_Int = NORM_Int; // OK NORM_Int = NULL_Int; // NO, you can't assign a null to an int 

www.ctvol.com true Article Csharp/C#教程:隐式转换Null-Coalescing运算符结果分享

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1008699.html

(0)
上一篇 2021年12月29日 上午8:50
下一篇 2021年12月29日 上午8:52

精彩推荐