1

我今天正在处理一些遗留代码,并注意到一些奇怪的东西。我们有一些旧的 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)我对类型推断是否正确?我认为可能是这种情况,因为该var关键字是在 .NET 3.5 中引入的。

2) 是否有任何可用于此更改(或类似更改)的文档?我一直在搜索 MSDN 有一段时间了,但一直没有找到任何东西。

4

1 回答 1

2

不,你不对。原因是现在出于某种原因正在使用不同的语言环境。
这就是为什么您应该始终在调用中指定文化ToString以避免这种类型的问题。

需要明确的是:这与类型推断完全无关。该对象在 .NET 2.0 中是盒装的,在 .NET 3.5 中DateTime仍然是盒装的。DateTime

关键字严格来说是var编译时特性。var使用关键字的代码和明确指定变量类型的代码之间的结果 IL 没有区别,例如:

var date = DateTime.Now;
// results in exactly the same IL code as:
DateTime date = DateTime.Now;
于 2012-07-24T14:03:32.713 回答