使用遗留代码时,我遇到了一些奇怪的变量赋值,我不确定它们是否是合法的 VB6 语法,但我找不到支持这种感觉的文档。
Dim ComStart, ComEnd, CR As Boolean
ComStart = ComEnd = CR = False
我的怀疑是
a) 原始声明应为
Dim ComStart as Boolean, ComEnd as Boolean, CR as Boolean
b)现在实施的声明不会分配任何东西给ComStart.
非常感谢任何答案或文档
使用遗留代码时,我遇到了一些奇怪的变量赋值,我不确定它们是否是合法的 VB6 语法,但我找不到支持这种感觉的文档。
Dim ComStart, ComEnd, CR As Boolean
ComStart = ComEnd = CR = False
我的怀疑是
a) 原始声明应为
Dim ComStart as Boolean, ComEnd as Boolean, CR as Boolean
b)现在实施的声明不会分配任何东西给ComStart.
非常感谢任何答案或文档
您找到的代码在技术上是合法的VB6,因为它可以编译和运行。但很有可能原作者认为代码会做一些不同的事情!有两个误解。
ComStart和是变体,ComEnd而CR不是布尔值。=中是相等运算符,而不是 C 中的赋值运算符。
CR = False不改变 的值CR。CR它比较to的当前值False,并评估为Trueif CRis equal to False。假设它评估为FalseComEnd = False。同样,这不会改变 的值ComEnd。它将它与 进行比较False,并评估为True好像ComEnd等于False。这次假设它评估为True。ComStart = True。这将值设置ComStart为True所以你的原始代码
Dim ComStart, ComEnd, CR As Boolean
ComStart = ComEnd = CR = False
创建两个变体ComStart和ComEnd一个 Boolean CR,然后
CR保持其默认值,FalseComEnd保持默认值,EmptyComStart设置为False因为Empty = (Empty = False)is False。简单的!...我希望遗留代码的其余部分更少,好吧,偶然。
所以代码应该是,正如你猜到的:
Dim ComStart as Boolean, ComEnd as Boolean, CR as Boolean
对于经验很少或没有经验的 VB6 开发人员或使用 VB6 代码的 .NET 开发人员来说,这是一个常见的错误 :)。它可以工作,因为 VB6 将假定分配的值并自动转换它,但它也可能导致难以调试的讨厌的错误。