Теперь, как программист C#, я знаю, что дженерики являются потрясающими. Однако при баловании некоторым VB.NET, я обнаружил, что следующее не вызывает ошибку компилятора:
Dim instance As List(Of Integer)
instance.Add(True)
Почему это? Я знаю, что Вы не требуетесь бросить в VB.NET, но я думал бы, что это уничтожает главную причину использовать дженерики - безопасность типов.
Править: У меня нет опции строгой на, поскольку это не было реальным осуществлением программирования, просто меня взглянувший на VB.NET в теории. Это - теоретический вопрос, поскольку я ожидал, что это вызовет ошибку компилятора даже с опцией, строгой прочь, так же, как функция универсальных типов.
Без Option Strict On
, VB.NET может неявно преобразовать логическое
в целое
. Я настоятельно рекомендую (особенно исходя из опыта работы с C #) сделать Option Strict On
значением по умолчанию для вашей работы на VB.NET.
Это можно сделать в Visual Studio в Инструменты
| Параметры
| Проекты и решения
| Настройки VB по умолчанию
.
отредактируйте , чтобы узнать больше о «расслабленном» отношении VB (классический) к преобразованию типов, погуглите «Принуждение злого типа». Тем из нас, кто стремился хорошо поработать в VB (классическом), приходилось бороться с этим демоном некоторое время ...
VB.NET преобразует в месте вызова функции. В List(of Integer) по-прежнему хранится целое число (-1, которое является целочисленным значением True)