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()は2つの間で異なる結果を返します...

私の質問は次のとおりです。

1)型推論について正しいですか?varキーワードが.NET3.5で導入されたので、これが当てはまるのではないかと思いました。

2)この変更(または同様の変更)に利用できるドキュメントはありますか?しばらくの間MSDNを検索してきましたが、何も見つかりませんでした。

4

1 に答える 1

2

いいえ、あなたは正しくありません。その理由は、現在、何らかの理由で別のロケールが使用されているためです。そのため、この種の問題を正確に回避するために
、呼び出しで常にカルチャを指定する必要があります。ToString

明確にするために:これは型推論とはまったく関係がありません。オブジェクトはDateTime.NET2.0でボックス化されていましたが、.NET3.5ではボックス化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 に答える