簡體   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