2015-02-09 35 views
5

如果我有一個方法:編譯器如何理解Nullables?

protected int CalculateActualDuration(DateTime? startDate, DateTime? endDate) { 
     if (startDate.HasValue && endDate.HasValue) { 
      return Math.Abs((int)(endDate.Value.Subtract(startDate.Value).TotalMinutes)); 
     } 
     else { 
      return 0; 
     } 
    } 

我能夠通過傳遞兩個日期時間要調用的方法?和一個DateTime。那麼編譯器如何理解這種差異呢?

這是否意味着,如果我通過在datetime值,像

if (true && true) 

和所有的*。價值已被更改爲正確的對象if語句基本上將soemthing?那麼所有endDate.Value都是現在的EndDates?

在運行時,編譯器是否將所有不爲空的參數都轉換爲空字符串?

+0

最後一個問題的答案是「是」。把一個可以爲空的DateTime看作一個正常的DateTime,並粘貼一個布爾值來指示它的無效性。現在是否清楚編譯器如何處理將正常的DateTime轉換爲可爲空的DateTime? – 2015-02-09 03:43:33

回答

10

您的方法中的所有內容都保持不變,並且參數startDateendDate仍然是Nullable<T> struct的實例。

當您通過在Nullable<T>結構指定的implicit conversion 「正常」 DateTime的方法,你就趁着:

:上面鏈接

public static implicit operator Nullable<T>(T value) { 
    return new Nullable<T>(value); 
} 

從MSDN頁面如果參數不是null,則新的Nullable值的Value屬性被初始化到值參數並且HasValue屬性被初始化爲true