2012-01-06 31 views
24

我正在做一些遗留应用程序的工作,而我的VB6技能并不是那么棒。我需要检查一个String字段是否已经被初始化,并设置为null/nothing或空字符串以外的内容。在C#中我只是这样做:VB6相当于string.IsNullOrEmpty

if (string.IsNullOrEmpty(myObj.Str)) 

我不知道什么是相当于,这是在VB6,我担心使用If myObj.Str = "",把它很好。什么是正确的方法来做到这一点?

为了澄清,我想要的东西,如果有以下为真,将返回true:

  • 领域尚未初始化
  • 领域是一个空字符串(STR =“”,长度= 0)
  • 该字段设置为null,或者Nothing或vbnull,或者任何形式的null值应用于VB6字符串。

领域原本是龙,而我更换代码检查它是否被设置为0

回答

37

VB6被设计成容易

使用

If str = "" Then 
    ' uninitialised, null or empty "" 
  • 字符串自动初始化为[]编辑]空字符串。
  • 空字符串是vbNullString。
  • 但是不用担心关于空字符串。对于(几乎)任何字符串操作,VB6空字符串与空字符串“”无法区分。
+1

将vbNullString转换为API函数的LPCSTR参数可能是个问题。 – wqw 2012-01-07 10:43:55

+1

@wqw真(但相当罕见的情况)。我会编辑说“几乎任何” – MarkJ 2012-01-07 16:27:01

+3

不正确。字符串不会自动初始化为空。使用StrPtr(s)将为空字符串(vbNullString)返回0,并且StrPtr(“”)将返回空字符串的地址。但是,VB6确实对待它们都是一样的,它只是可能关心的API调用。 – 2012-01-07 18:51:47

3

使用是对蜇伤或为对象

什么使用LEN( “ ”)而不是“ ”=“”,因为它更快

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 

问候

+0

并为空字符串使用如果LENB(S)= 0,则 – ClickerMonkey 2012-01-06 18:11:35

+0

编辑* ^他说什么。 - 他也想检查一个空的或0长度的初始化字符串,所以还要检查s ==“” – Tank 2012-01-06 18:12:32

+0

在VB6 *或* VB.Net中字符串为空是不正确的。对于VB6和VB.Net,只需使用=“”即可Nothing Nothing – MarkJ 2012-01-07 08:25:41

11

最优化和安全的方式来满足你的三个条件如下:

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

+1测试字符串的长度确实是测试零长度字符串的最有效/最高效的方式。 – tcarvin 2012-01-09 13:02:24

+1

测试长度是测试零长度字符串的最高性能方式,但它比简单的'str =“”'更不可读。表演真的很重要吗? – MarkJ 2012-01-10 17:22:48

0

随着“空白点”和“空字符串”实际上是不同的价值观,这种方法可以很容易地为你捕捉两个:

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

'Trim(strValue& vbNullString)= vbNullString'也会捕获空间填充。 – Fionnuala 2012-01-07 16:15:34

+0

不正确。空值和空字符串在VB6(和VB.Net)中是相同的值。 – MarkJ 2012-01-07 16:25:35

+0

哎呀,误读VBA,对不起。 – Fionnuala 2012-01-07 16:32:17

2

我试过,If str = ""然后

,但它没有工作。

,以确定是否给定的字符串是空的最佳方法是:

If IsNull(str)然后

“这将很好地工作

0

只是添加信息,以MarkJ的答案。如果您使用的是记录集,则此项目为空时会抛出运行时错误。你应该这样做:

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

祝你好运。

0

“使用VbNullstring可以是一个非常有效的方法

Dim YourString as string 
dim HasValue as boolean 

If YourString = vbnullstring then 
    HasValue = False 
Else 
HasValue = True 
End if 
+2

不要这样写代码;写'HasValue = YourString <> vbNullString'代替:更直接,'If'在这里完全没有必要。此外,在VB6中没有理由**写这个。你可以简单地说'HasValue = YourString <>“”' – 2016-08-08 15:34:35