通用列表AddRange()类型安全

时间:2017-06-06 11:40:26

标签: .net vb.net visual-studio generics

具有讽刺意味的是,在将一堆旧的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转换为通用列表的整个理由是为了防止这样的错误。

1 个答案:

答案 0 :(得分:5)

你需要打开Option Strict才能得到关于此的编译器错误 - 最简单的方法是放

Option Strict On

位于源文件的顶部。

现有项目的更强大的解决方案是转到您的项目属性,并在“编译”部分为您的项目全局设置它。

作为Tim mentioned in a comment,最好的解决方案是将所有新VB项目的设置更改为默认设置: enter image description here