我今天正在处理一些遗留代码并注意到一些奇怪的事情。我们有一些旧的ADO .NET代码,它将数据库中的一些数据读入DataTable
。
在某个时间点,以下代码
SubscriptionDT.Rows[0]["LastShownBenefits"].ToString().Substring(0, 10)
返回
2001-01-01
然而,现在它返回
1/1/2001 1
如果我快速观察SubscriptionDT.Rows[0]["LastShownBenefits"]
,它似乎能够推断出类型是System.DateTime
。 (此列是数据库中的DateTime
。但是,我觉得在将项目升级到.NET 3.5之前,这可能被认为是System.Object
。显然,调用.ToString()
会在两者之间返回不同的结果......
我的问题是:
1)我对类型推断是对的吗?我认为可能是这种情况,因为在.NET 3.5中引入了var
关键字。
2)是否有可用于此更改的文档(或类似的更改)?我一直在MSDN上搜索一段时间,但一直找不到任何东西。
答案 0 :(得分:2)
不,你不对。原因是现在出于某种原因使用了不同的语言环境
这就是为什么你应该总是在调用ToString
时指定文化来避免这种类型的问题。
要明确:这与类型推断完全无关。该对象是.NET 2.0中的盒装DateTime
,它仍然是.NET 3.5中的盒装DateTime
。
var
关键字严格来说是编译时功能。使用var
关键字的代码与明确指定变量类型的代码之间的结果IL没有区别,例如:
var date = DateTime.Now;
// results in exactly the same IL code as:
DateTime date = DateTime.Now;