linq - SingleOrDefault() 方法 : what is "a default value"?

标签 linq

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

if (fromUser.AllFriends.Where(af => af.FriendUserID == toUserID).SingleOrDefault() == ???

鉴于文档:

返回序列的单个特定元素 或默认值 如果找不到该元素。

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

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

谢谢。

最佳答案

摘自 ECMA 圣经,第 334 节:

12.2 默认值

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

  • 对于值类型的变量,默认值与值类型的默认构造函数计算的值相同(第 11.1.1 节)。
  • 对于引用类型的变量,默认值为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)的无参数实例构造函数,称为默认构造函数。
    默认构造函数返回一个零初始化实例,称为值类型的默认值:
  • 对于所有简单类型,默认值是由全零位模式产生的值:
  • 对于 sbyte、byte、short、ushort、int、uint、long 和 ulong,默认值为 0 .
  • 对于 char,默认值为 '\x0000' .
  • 对于浮点数,默认值为 0.0f .
  • 对于 double ,默认值为 0.0d .
  • 对于十进制,默认值为 0m .
  • 对于 bool,默认值为 false .
  • 对于枚举类型 E,默认值为 0 .
  • 对于结构类型,默认值是将所有值类型字段设置为其默认值并将所有引用类型字段设置为 null 所产生的值。 .
  • 对于可空类型,默认值为 HasValue返回 false .


  • 阿门

    你可以 download the holy book (4.0 版)直接来自微软网站。

    关于linq - SingleOrDefault() 方法 : what is "a default value"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3713122/

    相关文章:

    linq - 如何将LINQ表达式组合为一个?

    c# - 如何使用 LINQ 读取包含 xincluded 文件的 XML?

    c# - 将 DataRow 集合与 List<T> 进行比较

    c# - 如何使用 linq 从表中获取有限的行

    linq - 任何人都知道任何 Linq to XQuery 实现?

    c# - 如何实现 MaxOrDefault(x => x.SomeInt) LINQ 扩展?

    c# - 使用linq比较两个文本文件?

    c# - 使用嵌套的 LambdaExpressions 编译 LambdaExpression 时,它们也会编译吗?

    c# - 通过两个字段获取不同的值

    c# - 如何在 EF Core 中使用动态数量的参数构造原始 SQL 查询