簡體   English   中英

為什么要將null值轉換為可以為null的struct

[英]Why should convert null value to nullable struct

我有一個函數,它返回一個可為空的struct 我注意到兩個類似的案例

第一:效果很好:

public static GeometricCircle? CircleBySize(GeometricPoint point, double size)
{
    if (size >= epsilon)
        return null;

    return new GeometricCircle(point.Position, new Vector(1, 0, 0), size, true);
}

第二:需要將null值轉換為GeometricCircle嗎?

public static GeometricCircle? CircleBySize(GeometricPoint point, double size)
{
    return size > epsilon ? new GeometricCircle(point.Position, new Vector(1, 0, 0), size, true) : (GeometricCircle?)null;
}

有人知道有什么區別嗎?

在第一個示例中,當size >= epsilon時,返回null 編譯器知道null是可空類型的有效值。

在第二個示例中,您使用的是?:三元運算符 ,它帶有自己的一組規則。

condition ? first_expression : second_expression;

MSDN告訴我們(我的重點)......

first_expressionsecond_expression的類型必須相同,或者從一種類型到另一種類型必須存在隱式轉換

這里的關鍵區別是null不能隱式轉換為GeometricCirclefirst_expression的類型)。

所以你必須明確表達 ,使用一個轉換為GeometricCircle? ,然后可以隱式轉換為GeometricCircle

暫無
暫無

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

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