VB中用Boolean值索引Hashtable赋值给Boolean变量的语法疑问
核心结论
这是VB.NET在Option Strict Off配置下,非泛型Hashtable的标准索引器调用写法,不存在特殊语法黑魔法,是早年VB项目里非常常见的松散写法。
逐行逻辑拆解
Hashtable的索引规则
代码中用到的Hashtable是System.Collections命名空间下的非泛型键值对集合,它的默认索引器(对应Item属性)的参数和返回值全是Object类型,不限制键的具体类型,因此传入Boolean类型的变量b作为键完全合法——本质是取h中键值等于b(布尔值True/False)对应的存储值。
非泛型Hashtable本身就是独立的键值存储结构,不需要额外关联数组或其他集合即可通过键索引取值,不少老开发者会直接用布尔值做键,实现类似二元分支的取值逻辑。赋值的隐式转换逻辑
直接将索引器返回的Object类型结果赋值给Boolean变量a,完全依赖VB项目默认关闭严格类型检查的特性:- 如果对应键存在,且存储值本身是Boolean类型,直接完成赋值
- 如果对应键不存在,索引器返回
Nothing,VB会自动将Nothing隐式转换为Boolean的False,不会抛出空引用异常 - 如果对应键存储的是其他可转换为Boolean的类型(比如整数、"True"/"False"格式的字符串),VB会自动做类型转换,转换失败才会抛出运行时异常
代码潜在问题
- 你贴的片段中
h仅声明未实例化,如果运行到该行前h仍未被赋值为具体的Hashtable实例,会直接抛出空引用异常,大概率是截取的代码片段不全 - 变量
b如果未提前赋值,Boolean类型的默认值为False,会固定取键为False对应的值,容易产生隐蔽的逻辑bug - 如果项目开启
Option Strict On(强制严格类型检查),这段代码会直接编译报错,要求做显式类型转换和空值判断
- 你贴的片段中
内容的提问来源于stack exchange,提问作者Code4Cash
相关产品推荐
相关产品推荐

