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

时间:2010-09-14 21:39:52

标签: linq

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

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

鉴于文件:

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

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

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

感谢。

6 个答案:

答案 0 :(得分: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]; 
     

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

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

11.1.2默认构造函数

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

  • 对于所有简单类型,默认值是由全零的位模式生成的值:
    • 对于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的值。

阿门

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

答案 1 :(得分:3)

参考类型的默认值为null。数值类型的默认值为0。还有一些其他特殊情况,但如果您想确定,只需评估default(type)以获取您不确定的任何值类型的特定默认值。在您的特定情况下,默认值可能是null,假设您正在使用类。

答案 2 :(得分:3)

默认值是该类型的默认值(T)。

但在您的情况下,您应该使用Enumerable.Any代替:

if (!fromUser.AllFriends.Where(af => af.FriendUserID == toUserID).Any())
{
    // etc...
}

您还可以合并WhereAny来电:

if (!fromUser.AllFriends.Any(af => af.FriendUserID == toUserID))
{
    // etc...
}

答案 3 :(得分:2)

默认值是您拨打default(TypeName)时获得的任何内容。

对于ReferenceTypes,这总是null。对于ValueTypes,这通常为0(对于数字类型)或在调用其默认构造函数后的结构实例。

答案 4 :(得分:2)

ReferenceTypes默认为null

ValueTypes可在此处找到:http://msdn.microsoft.com/en-us/library/83fhsxwc%28v=VS.90%29.aspx

答案 5 :(得分:0)

元素的默认值是default(type)。对于类,默认值为null。