2014-10-17 98 views
1

我想发现并使用VB.Net等效替换VB6中看到的VbNull值,但我找不到表示该值为空的正确值。在VB.Net中VB6的vbNull等价物?

Dim formatProvider As NumberFormatInfo = 
    DirectCast(CultureInfo.GetCultureInfo("es-ES").NumberFormat.Clone, NumberFormatInfo) 

With formatProvider 
    .NumberDecimalSeparator = Microsoft.VisualBasic.vbNull 
End With 

Dim pi As String = Math.PI.ToString(String.Empty, formatProvider) 

NumberDecimalSeparator酒店不接受空值,但它accpets的vbNull价值,以及和它的作品perfectlly(隔板被删除),所以......我想,我可以使用复制相同的结果.Net类库避免在VB6上使用。

我试图取代vbNull与其他价值观,但都由于物业的空虚限制,我上面提到的给一个例外:

"" 
String.Empty 
ControlChars.NullChar() 
DBNull.Value.ToString 
Nothing 

UPDATE

我也尝试了这些假设的解决方案,其中的任何一个会抛出一个空值的异常,但相反,它不会给我预期的结果,因为使用这个作为分隔符来格式化十进制数时,打印的数字被打破。

Convert.ToChar(0) 
Char.ConvertFromUtf32(0) 
New String(Char.ConvertFromUtf32(0)) 

来源:VB.NET - string of nulls

+1

.NumberDecimalSeparator = CHRW(&H200B) – 2014-10-17 10:14:04

+2

汉斯使用'零长度space'提示 - 这是一个CH字符不显示 - http://www.fileformat.info/info/unicode/char/200B/index.htm – MarkJ 2014-10-17 11:26:03

+0

VB6的VbNull不会做你认为它的作用。它用于比较对象的VarType(ala现代的GetType)。 VbNull将等于NET中的Nothing。 – Plutonix 2014-10-17 19:55:36

回答

3

触发器是正确的是vbNull是恒定的,但它的价值正是如此定义:Public Const vbNull As VariantType = VariantType.Null

请参阅Microsoft Reference Source

2

是vbNull是一种数据类型,而不是你认为它是。从对象查看器(VB6或Office VBA编辑器按F2)

Const vbNull = 1 
    Member of VBA.VbVarType 
    Return value constant for VarType 

事情你可能有它混淆

Const vbNullChar = "" 
    Member of VBA.Constants 
    Basic constant for a single Null character (ASCII value 0); equivalent to Chr$(0) 

Const vbNullString = "" 
    Member of VBA.Constants 
    Constant for use when calling external procedures requiring a string whose value is zero