2013-07-15 115 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