具有讽刺意味的是,在将一堆旧的Arraylists转换为使用通用List(Of foo)集合时,为了提高类型安全性,我在List.AddRange()
方法中遇到了意外行为。
鉴于以下代码,我原本期望编译器出错,但我没有得到一个,并且项目一直运行到AddRange调用,其中'无法强制转换List(Of bar)to List(Of foo)' 抛出异常。
Dim barList As List(Of bar) = BarFunctionsLib.GetBarList()
Dim fooList As New List(Of foo)
fooList.AddRange(barList)
我不应该尝试将List(Of bar)传递给List(Of foo)上的AddRange方法吗?我在VS2015中没有通过我的编译器设置,也许他们过去已经摆弄过,现在让它通过?
任何想法都会受到赞赏,因为将工作转换为将Arraylists转换为通用列表的整个理由是为了防止这样的错误。
答案 0 :(得分:5)
你需要打开Option Strict
才能得到关于此的编译器错误 - 最简单的方法是放
Option Strict On
位于源文件的顶部。
现有项目的更强大的解决方案是转到您的项目属性,并在“编译”部分为您的项目全局设置它。
作为Tim mentioned in a comment,最好的解决方案是将所有新VB项目的设置更改为默认设置: