什么是布尔? 返回类型意味着什
我看到一个方法返回bool?
,有谁知道它的含义?
T?
是Nullable
的C#语法快捷方式。 那么bool?
映射到Nullable
。 所以在你的情况下,它是一个结构,无论是null
,还是具有bool
值。
如果Nullable
为null
,则与引用类型为null有点不同。 它基本上是一个包含底层类型和布尔标志HasValue
。 但是运行时和C#语言都有点神奇,假装具有HasValue==false
的Nullable
实际上是空的。 但有时候差异仍然存在。
底层类型可以隐式转换为可空类型( bool
– > bool?
)。 要从可空类型中获取基础类型,您可以显式转换( (bool)myNullableBool
或使用Value
属性( myNullableBool.Value
)。您应该在之前检查null
,否则如果可空值可以获得exception是null
。
- 可空类型(C#编程指南)
-
Nullable
在C#中,“原始”类型不能包含空值:
int blah = null;
这会产生exception,因为’int’不能保存null值。
与double,float,bool,DateTime相同……
真的很好。 使用数据库时会出现问题。 在数据库中,您可以拥有可以为null的行,例如Age(即int)。
你如何在一个物体上持有那一行? 你的int不能保存null值,行可以为null。
出于这个原因,MS创建了一个新的结构,Nullable,你可以将一个“原始”类型(或结构)传递给该结构,使其可以为空:
Nullable blah = null;
现在,这不会成为exception,该变量可以包含int和null。
因为Nullable太长,MS创建了某种别名:如果你把’?’ 在类型之后,它变得可以为空:
int? blah = null; Nullable blah = null;
这两行完全相同,但第一行更容易阅读。
像这样:)
任何(非废话1 ) 值类型后缀?
使它成为可以为空的类型:
-
int?
是一个可以为空的整数 -
bool?
是可以为空的布尔值,它实际上是一个三态布尔值 (true
,false
和null
) – 当你需要实现一些三态行为时想一想。 - …
换句话说, object
类型不支持可空定义作为object?
因为它是引用类型,并且可以具有null
值。
真实的用法
Nullable类型最常用于数据库,因为它们使得转换为nullable int / bit / datetime /等非常容易。 列到CLR类型。 就像在这个例子中:
create table Test ( Id int identity not null primary key, Days int null, ExactDate datetime null, Selected bit null )
这很容易转换为POCO:
public class Test { public int Id { get; set; } public int? Days { get; set; } public DateTime? ExactDate { get; set; } public bool? Selected { get; set; } }
1 no-nonsense指的是除了
Nullable
之外的所有值类型,它本身就是一个值类型,但是再次使它可以为空可能没有任何意义…避免这样的愚蠢…它不会编译无论如何因为Nullable
可以用两种方式解释:> i = null; •
i.HasValue == false
•i.HasValue == true && i.Value.HasValue == false