【问题标题】:VB6 equivalent of string.IsNullOrEmptyVB6 等价于 string.IsNullOrEmpty
【发布时间】:2012-01-06 18:06:11
【问题描述】:

我正在做一些遗留应用程序的工作,而我的 VB6 技能并不是那么好。我需要检查一个字符串字段是否已初始化并设置为 null/nothing 或空字符串以外的值。在 C# 中,我会做类似的事情:

if (string.IsNullOrEmpty(myObj.Str))

我不确定在 VB6 中与此等效的是什么,我对使用 If myObj.Str = "" 并称其为好感到紧张。这样做的正确方法是什么?

为了澄清,如果以下任何一项为真,我想要返回 True 的东西:

  • 该字段尚未初始化
  • 字段为空字符串(str = "", length = 0)
  • 该字段设置为 null、Nothing、vbnull 或适用于 VB6 字符串的任何形式的 null 值。

该字段原本是Long,我要替换的代码检查它是否设置为0。

【问题讨论】:

    标签: string vb6


    【解决方案1】:

    VB6 旨在简单

    使用

    If str = "" Then 
      ' uninitialised, null or empty ""
    
    • 字符串会自动初始化为 [edit] 一个空字符串。
    • 空字符串是 vbNullString。
    • 但是不用担心空字符串。对于(几乎)任何字符串操作,VB6 空字符串都无法与空字符串 "" 区分开来。

    【讨论】:

    • 将 vbNullString 转换为 API 函数的 LPCSTR 参数可能会出现问题。
    • @wqw 是的(但这种情况非常罕见)。我会编辑说“几乎任何”
    • 不正确。字符串不会自动初始化为空。使用 StrPtr(s) 将为空字符串 (vbNullString) 返回 0,而 StrPtr("") 将返回空字符串的地址。但是,VB6 确实对它们都一视同仁,只是 API 调用可能会关心。
    • 很高兴知道这一点。谢谢。
    • 这是转换为 VB.Net 时的陷阱。在 VB.Net vbNullstringString.Empty
    【解决方案2】:

    满足您的 3 个要求的最优化和最安全的方法如下:

    If LenB(myObj.Str) = 0 
    Then Debug.Print "String is empty/null/not initialized" 
    Else Debug.Print "Not Empty"
    

    【讨论】:

    • +1 测试字符串的长度确实是测试零长度字符串的最有效/最有效的方法。
    • 测试长度是测试零长度字符串的最有效方法,但它比简单的str = "" 可读性差。性能真正重要的频率有多高?
    【解决方案3】:

    Is Null 用于 stings 或 is nothing 用于对象

    使用 len("string") 代替 "string"="" 因为它更快

    Dim s As String
    
    If Not (s Is Null) Then
      MsgBox "SET"
    
      if (len(s)>0) then
        MsgBox "size > 0"
      else
        MsgBox "size = 0"
      end if
    Else
      MsgBox "not SET"
    End If
    

    问候

    【讨论】:

    • 对于空字符串使用 If LenB(s) = 0 Then
    • 编辑* ^ 他说的话。 --他还想检查一个空的或长度为 0 的初始化字符串,所以还要检查 s == ""
    • Is Null 字符串在 VB6 VB.Net 中不正确。只需在 VB6 中使用 = "",在 VB.Net 中使用 Is Nothing
    【解决方案4】:

    由于 'Nulls' 和 'Empty Strings' 实际上是不同的值,这种方法可以轻松地为您捕获两者:

    If strValue & "" = "" Then
        'This is Null
    Else
        'This is NOT Null
    End If
    

    【讨论】:

    • Trim(strValue & vbNullString) = vbNullString 也会捕获已填充的空间。
    • 不正确。 Null 和空字符串在 VB6(和 VB.Net)中是相同的值。
    • 这有点奇怪,Ms Access 2000 - 2003 使用 VB6,它肯定将它们视为不同的值。除非这与表格的 Jet 方面有关。
    【解决方案5】:

    我试过了,If str = "" 然后

    但它不起作用。

    识别给定字符串是否为空的最佳方法是:

    If IsNull(str)然后

    '这将完美地工作

    【讨论】:

    • 但是对 null 的测试并没有捕捉到一个空字符串。所以你必须两者都做。
    【解决方案6】:

    只是在 MarkJ 的答案中添加信息。如果您正在使用记录集,则此

    if rs.fields.item("rsField").value = "" then
    

    如果该项目为空,将引发运行时错误。你应该这样做:

    if rs.fields.item("rsField").value & "" = "" then
    

    祝你好运。

    【讨论】:

      【解决方案7】:

      '使用VbNullstring可以是一种非常有效的方式

      Dim YourString as string  
      dim HasValue as boolean
      
      If YourString = vbnullstring then  
          HasValue = False  
      Else  
      HasValue = True  
      End if
      

      【讨论】:

      • 不要这样写代码;改写HasValue = YourString <> vbNullString:更直接,If 在这里完全没有必要。此外,没有理由永远在 VB6 中编写此代码。你可以简单地说HasValue = YourString <> ""
      【解决方案8】:

      作为对其他答案的改进:

      这种方法应该会更快:

      If Len(s) Then
      'string not empty
      Else
      'string empty
      End If
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-09
        • 1970-01-01
        • 1970-01-01
        • 2013-09-11
        • 2011-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多