Дженерики в VB.NET
-
19-09-2019 - |
Вопрос
Теперь, как программист на C #, я знаю, что дженерики - это потрясающе.Однако, занимаясь некоторыми VB.NET, я обнаружил, что следующее не вызывает ошибку компилятора:
Dim instance As List(Of Integer)
instance.Add(True)
Почему это происходит?Я знаю, что от вас не требуется приводить в действие VB.NET , но я бы подумал, что это убивает основную причину использования generics - безопасность типов.
Редактировать: У меня нет опции strict on , так как это не было настоящим упражнением по программированию, просто я взглянул на VB.NET в теории.Это теоретический вопрос, поскольку я ожидал, что это вызовет ошибку компилятора даже при отключенной опции strict, просто как особенность универсальных типов.
Решение
Без Option Strict On
, VB.NET рад неявно преобразовать Boolean
Для Integer
.Я настоятельно рекомендую (особенно исходя из фона C #), чтобы вы сделали Option Strict On
значение по умолчанию для вашей VB.NET работы.
Вы можете сделать это в Visual Studio в Tools
| Options
| Projects and Solutions
| VB Defaults
.
Редактировать подробнее о "расслабленном" отношении VB (classic) к преобразованию типов читайте в Google "Злое принуждение к вводу типов".Тем из нас, кто стремился хорошо поработать в VB (classic), некоторое время приходилось бороться с этим демоном...
Другие советы
У вас есть Вариант Строгий включен?
VB.NET преобразует на сайте вызова функции.Список (из целых чисел) по-прежнему хранит целое число (-1, которое является целочисленным значением True).