2013-07-15 71 views
6

我有2個可爲空的DateTimes,所以減去它們將導致可空的TimeSpan。我想對此致電.ValueVisual Studio 2012不承認可空類型

但是,自動完成下拉列表中認爲,括號內的類型是一個正常的時間跨度。 .Value不在列表中,當我使用任何建議時,它不會編譯。它會在我手動鍵入.Value時進行編譯。

如果只有一個日期時間是可空的,則會發生同樣的問題。如果我將TimeSpan?添加到DateTime?導致DateTime?也會發生。 Intellisense認爲這是一個DateTime

這是Visual Studio的智能感知問題嗎?我在更新3,我沒有ReSharper。另一臺計算機上出現同樣的問

編輯:很清楚,我在問一個關於爲什麼intellisense暗示錯誤類型的問題。我知道該編寫什麼代碼才能編譯。

+0

奇怪,當你施放時發生的事情是Timespan ie。 '(TimeSpan)(date1 - date2).'? – JMK

+0

@JMK它最後一個鑄造,所以同樣的行爲。你的意思是把整個事情放在括號內嗎? '((TimeSpan?)(date1 - date2))。Value'工作正常。 – Tom

+0

主要是出於好奇而問,有興趣知道它是什麼:) – JMK

回答

5

同意,IS得到這個錯誤,並不正確地推斷減法的結果是一個Nullable<TimeSpan>,它推斷TimeSpan。您可以通過類似這樣的而不是寫它捶它的腦袋:

var span = date1 - date2; 
span. 

現在是不正確推斷跨度變量的類型,你會看到的HasValue在自動完成窗口。否則,這在運行時是不會慢的,所以它是一個合理的解決方法。

您或我們可以對原始的oops做任何事情,但是您可以在connect.microsoft.com上提交反饋報告。發佈一個鏈接,以便我們可以投票。

+0

謝謝,在這裏你去https://connect.microsoft.com/VisualStudio/feedback/details/793983/intellisense-inferring-incorrect-type – Tom