通用列表AddRange()类型安全

Ted*_*Ted 2 .net vb.net generics visual-studio

具有讽刺意味的是,在将一堆旧的Arraylists转换为使用通用List(Of foo)集合时,为了提高类型安全性,我在List.AddRange()方法中遇到了意外行为.

鉴于以下代码,我本来期望编译器错误,但我没有得到一个,并且项目运行直到AddRange调用,其中'无法将List(Of bar)转换为List(Of foo)'异常是抛出.

Dim barList As List(Of bar) = BarFunctionsLib.GetBarList()

Dim fooList As New List(Of foo)
fooList.AddRange(barList)
Run Code Online (Sandbox Code Playgroud)

我不应该尝试将List(Of bar)传递给List(Of foo)上的AddRange方法吗?我没有通过我在VS2015中的编译器设置,也许他们过去已经摆弄过,现在让它通过?

任何想法都将受到赞赏,因为将工作转换为将Arraylists转换为通用列表的整个理由是为了防止这样的错误.

Jam*_*rpe 6

您需要打开Option Strict以获得有关此的编译器错误 - 最简单的方法是放置

Option Strict On
Run Code Online (Sandbox Code Playgroud)

在源文件的顶部.

对现有项目更强大的解决方案是转到项目属性,在"编译"部分中为项目全局设置它.

正如蒂姆在评论提到的那样,最好的解决方案是将所有新VB项目的设置更改为默认设置: 在此输入图像描述