SingleOrDefault()方法:什么是"默认值"?

asf*_*adf 35 linq

我正在测试以下语句中是否存在用户记录:

if (fromUser.AllFriends.Where(af => af.FriendUserID == toUserID).SingleOrDefault() == ???
Run Code Online (Sandbox Code Playgroud)

鉴于文件:

返回序列的单个特定元素,如果未找到该元素,则返回默认值.

粗体文字指的是什么?我在if语句中测试的是什么?

一个严肃的问题,对大多数人来说可能听起来简单而荒谬.

谢谢.

Jul*_*lia 41

摘自ECMA圣经,334节:


12.2默认值

变量的默认值取决于变量的类型,并确定如下:

  • 对于value-type的变量,默认值与value-type的默认构造函数(第11.1.1节)计算的值相同.
  • 对于reference-type的变量,默认值为null.

[注意:初始化为默认值通常通过让内存管理器或垃圾收集器在分配使用之前将内存初始化为所有位为零来完成.因此,使用all-bitszero来表示空引用是很方便的.结束说明]

可空类型的默认值是HasValue属性所属的实例false.引用可空类型的默认值的Value属性会导致类型异常 System.InvalidOperationException.默认值也称为可空类型的空值.存在从null类型(第11.2.7节)到任何可空类型的隐式转换,并且此转换生成该类型的空值.

18.3.4默认值

如第12.2节所述,几种变量在创建时会自动初始化为默认值.对于类类型和其他引用类型的变量,此缺省值为null.但是,由于结构体是不能为null的值类型,因此结构的默认值是通过将所有值类型字段设置为其默认值并将所有引用类型字段设置为null而生成的值.

示例:参考上面声明的Point结构,示例

Point[] a = new Point[100]; 
Run Code Online (Sandbox Code Playgroud)

将数组中的每个Point初始化为通过将x和y字段设置为零而生成的值.

struct的默认值对应于struct的默认构造函数返回的值(第11.1.1节).与类不同,不允许结构体声明无参数实例构造函数.相反,每个结构都隐式具有无参数实例构造函数,该构造函数始终返回将所有值类型字段设置为其默认值并将所有引用类型字段设置为null的值.

11.1.2默认构造函数

所有值类型都隐式声明一个名为default constructor的公共无参数实例构造函数.默认构造函数返回零初始化实例,称为值类型的默认值:

  • 对于所有简单类型,默认值是由全零的位模式生成的值:
    • 对于sbyte,byte,short,ushort,int,uint,long和ulong,默认值为0.
    • 对于char,默认值为'\x0000'.
    • 对于float,默认值为0.0f.
    • 对于double,默认值为0.0d.
    • 对于十进制,默认值为0m.
    • 对于bool,默认值为false.
  • 对于枚举类型E,默认值为0.
  • 对于struct-type,默认值是通过将所有值类型字段设置为其默认值并将所有引用类型字段设置为而生成的值null.
  • 对于可空类型,默认值为HasValue返回值false.

阿门

您可以直接从microsoft网站下载圣书(4.0版).