【问题标题】:What is the default value for an unset variant in VB6?VB6 中未设置的变体的默认值是什么?
【发布时间】:2011-05-16 02:45:09
【问题描述】:

我正在处理一些旧代码,它定义了一个像这样的全局变量...

Public myvar

这个变量永远不会被赋值,但后来在测试中使用......

If myvar <> somevalue then
    'do something
End If

对于 somevalue 的什么值会做某事?

【问题讨论】:

    标签: vb6


    【解决方案1】:
    • 默认值为Empty
    • 对于除Empty0"" 之外的任何值都将执行“某些操作”...
      • ...对于Nothing 值,代码将引发错误并且“某些事情将无法完成”。

    来自VB6 documentation

    当变量被初始化时,一个 数值变量初始化为 0, 可变长度字符串是 初始化为长度为零的字符串 (""),一个固定长度的字符串是 用零填充。变体变量 被初始化为空。每个元素 一个用户定义的类型变量是 初始化就好像它是一个单独的 变量。

    【讨论】:

    • 如果内存服务,如果someValue 被赋值为Nothing,或者是一个默认属性产生Nothing 的对象,则上面的代码将崩溃,等等,因为不等于运算符会比较注意到someValue 的类型是Object,尝试获取其默认属性,然后尝试比较它(如果需要,获取 its 默认属性等)获取Nothing的默认属性会失败,代码会崩溃。
    • @supercat 问题说“这个变量从未被赋值”。因此,由于这是 VB6,它将包含 Empty(与 Nothing 不同)。因此,除了 Empty、0 或 ""
    • 该问题假定myVar 从未被赋值,并询问someValue 的哪些值将执行指示的语句。我不确定如果On Error Resume Next 生效会发生什么,但如果不是,我很确定someValueNothingdo something 代码不会执行。
    • 哦!现在我已经正确阅读了您的第一条评论。是的,你可能是对的。我相应地编辑了我的答案。
    【解决方案2】:

    Get the most out of Variants in VB6 我会假设如果myvar 不是“”,那么do something。我不确定,现在无法检查,但您可以自己检查。

    当一个 Variant 已声明但 没有赋值,它包含 特殊值 空。你可以测试 这与 IsEmpty 函数
    ...
    如果 一个空的 Variant 用于 表达式,它将评估为 值 0 或空字符串 取决于表达式。

    【讨论】:

    • +1 用于提醒 Empty 变体将被强制转换为 "" 的字符串或 0 的数字
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 2018-10-18
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    相关资源
    最近更新 更多