簡體   English   中英

C# 可空類型和 Value 屬性

[英]C# Nullable Types and the Value property

我有點不清楚何時/是否在獲取可空類型中包含的值時必須使用可空類型的Value屬性。 考慮以下示例:

int? x = 10;

Console.WriteLine("The value of 'x' is " + x.Value);
Console.WriteLine("The value of 'x' is " + x);

這兩者都返回相同的值 (10)。

但是,如果我最初將x設置為null ,第一個Console.WriteLine會引發異常,而第二個則不會。

所以,我的問題是這個。 使用Value屬性有什么意義? 似乎不需要獲取實際值(即使它是null ),如果值確實是null ,則會拋出異常。

通常需要-只是沒有你的具體情況。 x的類型是Nullable<int> ,而不是int - 並且沒有從Nullable<T>T隱式轉換。

不過,讓我們看看您的示例中發生了什么。 您的最后一行正在轉換為:

Console.WriteLine(string.Concat("The value of 'x' is ", x));

這是拳擊x ,這將導致無論是盒裝int空引用...這兩者都是通過處理string.Concat

當您通過字符串連接轉換為字符串時,例如,如果您想要:

int nonNullable = x.Value;

那么你必須使用Value屬性-或有明確的轉換,也可能是空合並運算符,或一個電話GetValueOrDefault

int nonNullable = (int) x;
int alternative = x ?? 20;
int andAnother = x.GetValueOrDefault(20);

xx.Value有不同的類型。

    static void Meth(int i)
    {
        int? x = 5;
        Meth(x);
        Meth(x.Value);
    }

第二行不編譯。

所以使用x.Value原因很明顯——當你需要實際值時需要調用它。 NullReferenceException是合理的,因為null不對應值類型的值。

如果 HasValue 屬性返回 true,您應該訪問 Value 屬性,否則您將收到異常。 您的示例有效,因為 Nullable 重載了 ToString() 方法,並且 C# 編譯器支持此類型的快捷方式。

x為空時x.Value會拋出 System.InvalidOperationException 異常(不管 x 的類型是什么)

string + null = string :也不例外

如果您想將 .value 用於可為空的 int。 你可以像這樣檢查值

int? x = null;
int valXX = x.HasValue ? x.Value : 0;
Console.WriteLine("The value of 'x' is ->" + x + "<-");
Console.WriteLine("The value of 'valXX' is ->" + valXX + "<-");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM