Вопрос

Теперь, как программист на 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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top