36
|
Quibblesome · 技术社区 · 16 年前 |
![]() |
1
60
没有隐式转换
换句话说,表达式“fred==false”的类型为
编辑:要回答评论,从来没有隐式的转换
此外,如果有
是
双向隐式转换,像“nullable+nonNullable”这样的表达式会非常令人困惑(对于支持+的类型,如
我100%支持只进行明确转换的决定
|
![]() |
2
8
因为弗雷德不是布尔值。它是一个结构体,具有一个名为IsNull、HasValue或其他任何布尔属性。..名为fred的对象是包含布尔值和值的复杂复合对象,而不是原始布尔值本身。.. 例如,下面是如何实现Nullable Int。几乎可以肯定,泛型Nullable的实现方式是类似的(但是通用的)。您可以在这里看到隐式和显式转换是如何实现的。。
|
![]() |
3
3
声明
注意
|
![]() |
4
0
如果你将fred转换为boolean,它将编译:
我认为当你比较布尔时?对于bool,编译器进行隐式转换,进行比较,然后返回true或false。结果:表达式的计算结果为bool。 当你不比较bool时?对于某物,表达式的计算结果为bool?谁在那里是非法的。 |
![]() |
5
0
从技术上讲,如果你有true运算符的实现,那么裸条件测试不需要隐式转换为bool。
最初的问题是寻找null的SQL风格实现,其中null更像是一个未知值,而Nullable实现更像是添加null作为额外的可能值。例如,比较:
中的类型提供了更多类似数据库的行为
|
![]() |
6
0
实施问题可以完美地表述为:
引用微软的话:
该规则没有提到隐式转换。这只是一个任意的约定,旨在保证没有布尔表达式有异常。一旦规则到位,我们就知道如何编写代码。遗憾的是,微软错过了这个一元运算符。为了与二进制运算符的行为保持一致,以下代码应该有一个圆满的结局。 因此
我敢打赌,现在有程序员不得不写作
|
![]() |
Dee J. Doena · 比较两个空可空值 8 年前 |
![]() |
Konrad Viltersten · 如何让EF理解某些列不可为空? 9 年前 |
![]() |
Martin Senne · SparkSQL:如何处理用户定义函数中的空值? 10 年前 |
![]() |
Muhammad Nasir · 空对象设计模式与空对象检查 10 年前 |
![]() |
checketts · 从可空对象创建流的惯用方法 10 年前 |