繁体   English   中英

什么是布尔? 返回类型意味着什

[英]What does the bool? return type mean?

我看到一个方法返回bool? ,有谁知道它的含义?

T? Nullable<T>的C#语法快捷方式。 那么bool? 映射到Nullable<bool> 所以在你的情况下,它是一个结构,它可以是null ,或者具有bool值。

如果Nullable<T>null ,则与引用类型为null有点不同。 它基本上是一个包含底层类型和布尔标志HasValue 但是运行时和C#语言都有点神奇,假装具有HasValue==falseNullable实际上是空的。 但有时候差异仍然存在。

底层类型可以隐式转换为可空类型( bool - > bool? )。 要从可空类型中获取基础类型,您可以显式转换( (bool)myNullableBool或使用Value属性( myNullableBool.Value )。您应该在之前检查null ,否则如果可以为null值,您将获得异常是null

在C#中,“原始”类型不能包含空值:

int blah = null;

这会产生异常,因为'int'不能保存null值。

与double,float,bool,DateTime相同......

真的很好。 使用数据库时会出现问题。 在数据库中,您可以拥有可以为null的行,例如Age(即int)。

你如何在一个物体上持有那一行? 你的int不能保存null值,行可以为null。

出于这个原因,MS创建了一个新的结构,Nullable,你可以将一个“原始”类型(或结构)传递给该结构,使其可以为空:

Nullable<int> blah = null;

现在,这不会成为例外,该变量可以包含int和null。

因为Nullable太长了,MS创造了某种别名:如果你把'?' 在类型之后,它变得可以为空:

int? blah = null;
Nullable<int> blah = null;

这两行完全相同,但第一行更容易阅读。

这样的东西:)

任何(非废话1值类型后缀? 使它成为可以为空的类型:

  • int? 是一个可以为空的整数
  • bool? 是可以为空的布尔值,它实际上是一个三态布尔值truefalsenull ) - 当你需要实现一些三态行为时想一想。
  • ...

换句话说, object类型不支持可空定义作为object? 因为它是引用类型,并且可以具有null值。

真实的用法

Nullable类型最常用于数据库,因为它们可以很容易地转换为nullable int / bit / datetime / etc. 列到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<T>之外的所有值类型,它本身就是一个值类型,但是再次使它可以为空可能没有任何意义...避免这样的愚蠢......它不会编译无论如何因为Nullable<Nullable<int>> i = null; 可以用两种方式解释:

i.HasValue == false
i.HasValue == true && i.Value.HasValue == false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM