我正在测试以下语句中是否存在用户记录:
if (fromUser.AllFriends.Where(af => af.FriendUserID == toUserID).SingleOrDefault() == ???
鉴于文档:
返回序列的单个特定元素 或默认值 如果找不到该元素。
粗体字是指什么?我在 if 语句中测试什么?
一个严肃的问题,对大多数人来说可能听起来简单而荒谬。
谢谢。
最佳答案
摘自 ECMA 圣经,第 334 节:
12.2 默认值
变量的默认值取决于变量的类型,并确定如下:
null
. [注意:初始化为默认值通常由内存管理器或垃圾收集器完成
在分配使用之前将内存初始化为所有位为零。因此,使用 all-bitszero 很方便
表示空引用。尾注]
可空类型的默认值是
HasValue
的实例。属性是 false
.引用可空类型的默认值的值属性导致类型异常
System.InvalidOperationException
.默认值也称为空值可空类型。存在从 null 类型(第 11.2.7 节)到任何可为 null 的类型的隐式转换,并且这
转换产生类型的空值。
18.3.4 默认值
如第 12.2 节所述,几种变量在以下情况下会自动初始化为其默认值
它们被创建。对于类类型和其他引用类型的变量,这个默认值为空。然而,
由于结构是不能为空的值类型,因此结构的默认值是由
将所有值类型字段设置为其默认值,将所有引用类型字段设置为空。
Example: Referring to the Point struct declared above, the example
Point[] a = new Point[100];
initializes each Point in the array to the value produced by setting the x and y fields to zero.
结构的默认值对应结构的默认构造函数返回的值
(§11.1.1)。与类不同,结构不允许声明无参数的实例构造函数。相反,每个结构都隐含一个无参数的实例构造函数,它总是返回结果的值
从将所有值类型字段设置为其默认值并将所有引用类型字段设置为空。
11.1.2 默认构造函数
所有值类型都隐式声明了一个公共(public)的无参数实例构造函数,称为默认构造函数。
默认构造函数返回一个零初始化实例,称为值类型的默认值:
0
. '\x0000'
. 0.0f
. 0.0d
. 0m
. false
. 0
. null
所产生的值。 . HasValue
返回 false
. 阿门
你可以 download the holy book (4.0 版)直接来自微软网站。
关于linq - SingleOrDefault() 方法 : what is "a default value"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3713122/