Выбирает ли C # неправильный тип для var при синтаксическом анализе динамического объекта?

Я использую следующий код для преобразования некоторого Json в динамический объект. Когда я использую DateTime.Parse для свойства моего динамического типа, я ожидаю, что var будет угадывать, что это тип DateTime ... вместо этого он остается динамическим. Это не может быть правдой, не так ли?

Полный пример ниже.

var settings = new JavaScriptSerializer().Deserialize<dynamic>(json);

var startDate = DateTime.Parse(settings.startDate);
var endDate = DateTime.Parse(settings.endDate);
var userId = int.Parse(settings.userId);

startDate, endDate и userId все еще динамические, что означает, что я не могу использовать их в последующих лямбда-выражениях. Очевидно, я могу исправить код с помощью:

DateTime startDate = DateTime.Parse(settings.startDate);
DateTime endDate = DateTime.Parse(settings.endDate);
int userId = int.Parse(settings.userId);

.. но похоже, что компилятор делает «неверное предположение». Кто-нибудь может мне это объяснить?

Спасибо

13
задан Mark Withers 21 February 2012 в 16:57
поделиться