Обобщения в VB.NET - PullRequest
6 голосов
/ 08 февраля 2010

Теперь, как программист на C #, я знаю, что дженерики - это круто.Тем не менее, изучая некоторые VB.NET, я обнаружил, что следующее не вызывает ошибку компилятора:

Dim instance As List(Of Integer)
instance.Add(True)

Почему это так?Я знаю, что от вас не требуется кастовать в VB.NET, но я бы подумал, что это убивает основную причину использования обобщений - безопасность типов.

Редактировать: Я неУ меня есть строгий выбор, поскольку это не было настоящим программированием, просто я взглянул на VB.NET в теории.Это теоретический вопрос, так как я ожидал, что он вызовет ошибку компилятора даже при выключенном параметре, так же как и в функции универсальных типов.

Ответы [ 3 ]

10 голосов
/ 08 февраля 2010

Без Option Strict On VB.NET с радостью неявно преобразует Boolean в Integer. Я настоятельно рекомендую (особенно из C # фона), чтобы вы установили Option Strict On по умолчанию для вашей работы в VB.NET.

Вы можете сделать это в Visual Studio в Tools | Options | Projects and Solutions | VB Defaults.

изменить для более подробной информации о «расслабленном» VB (классическом) отношении к преобразованию типов, в Google «Зло принуждение типов». Тем из нас, кто стремился сделать хорошую работу в VB (классике), пришлось бороться с этим демоном какое-то время ...

3 голосов
/ 08 февраля 2010

Есть ли у вас опция Строгий включена?

0 голосов
/ 08 февраля 2010

VB.NET конвертирует на сайте вызова функций. Список (целого числа) по-прежнему хранит целое число (-1, которое является целочисленным значением True)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...