Почему этот код компилируется в VS2005, а не в VS2008 (VB.NET) - PullRequest
3 голосов
/ 19 февраля 2010

Я нахожусь в процессе миграции веб-приложения VB.NET из Visual Studio 2005 (.NET 2.0) в Visual Studio 2008 (.NET 3.5), и хотя это было в основном просто, я столкнулся с проблемой, которая заняла некоторое время, чтобы решить.

Код, о котором идет речь, гласит:

Dim serviceArray = New SecurityLayer.Model.Service()
serviceArray = new SecurityLayer.SecurityBusinessController.GetServices(userId)

Компилируется в VS2005 / .NET2.0, но не работает в VS2008 / .NET3.5 со следующей ошибкой:

Значение типа «одномерный массив SecurityLayer.Model.Service» не может быть преобразовано в «SecurityLayer.Model.Service»

Это указывает на то, что serviceArray не объявлен как массив, и при чтении документации MSDN не похоже, что синтаксис изменился между версиями, но в нем говорится, что фигурные скобки необходимы независимо от того, передаются ли какие-либо значения или нет. Конечно, добавление фигурных скобок к его объявлению решает проблему (и компилятор переходит к следующему экземпляру!).

Dim serviceArray = New SecurityLayer.Model.Service(){}
serviceArray = new SecurityLayer.SecurityBusinessController.GetServices(userId)

После обновления всех экземпляров этого объявления код теперь создается и работает, как и ожидалось.

Option Explicit и Option Strict одинаковы в обеих IDE, поэтому этого не может быть (или, по крайней мере, это то, что я предполагаю).

Итак, мой вопрос: почему эта сборка была в VS2005 / .NET2.0, а не в VS2008 / .NET3.5?

Заранее спасибо

1 Ответ

6 голосов
/ 19 февраля 2010

VB.NET версии 9 получил вывод типа. Ранее ваше объявление Dim было нетипизировано, serviceArray имел тип Object.Теперь компилятор вывел из вашего предыдущего использования, что serviceArray имеет тип Service.Использование одной и той же переменной для хранения разных объектов является подозрительным.

...