如何让VB.NET的AddRange方法具备类型安全性,编译时检测类型不匹配问题
解决方案
该问题是VB.NET默认关闭了严格类型校验导致的,开启Option Strict On即可在编译阶段拦截这类类型不匹配错误,具体操作如下:
单文件生效
在对应代码文件的最顶部添加一行声明即可,仅对当前文件生效:
Option Strict On
项目全局生效
建议所有VB.NET项目默认开启全局严格校验,设置步骤:
- 右键解决方案资源管理器中的对应项目,选择「属性」
- 切换到左侧的「编译」标签页
- 找到
Option Strict下拉选项,选择「On」 - 可选:可将下方「隐式转换」「后期绑定和调用重载时的后期调度」「隐式类型假设为 Object」三个选项的行为从「警告」改为「错误」,进一步强化类型检查规则。
原理说明
VB.NET默认Option Strict为Off,是为了兼容旧版VB的松散语法特性,允许隐式类型转换、后期绑定等操作,泛型的类型兼容性检查也会被放宽,所以你这段类型完全不匹配的AddRange调用只会在运行时抛出异常,编译阶段不会拦截。
开启Option Strict On后,编译器会强制做严格的类型匹配校验,你提供的测试代码中b.AddRange(a)这一行会直接抛出编译错误:“类型“List(Of XDocument)”的值无法转换为“IEnumerable(Of MailAddress)””,在开发阶段就能提前发现问题。
如果有特殊场景需要临时放宽类型校验规则,可以单独在对应文件顶部添加Option Strict Off覆盖全局设置,非必要不建议关闭。
内容的提问来源于stack exchange,提问作者Yisroel M. Olewski
相关产品推荐
相关产品推荐

