【问题标题】:VB6's vbNull equivalent in VB.Net?VB.Net中VB6的vbNull等价物?
【发布时间】:2014-10-17 09:50:36
【问题描述】:

我想发现并使用 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 属性不接受空值,但它也接受 vbNull 值并且它工作得很好(分隔符被删除),所以......我想我可以使用重现相同的结果.Net 类库,以避免诉诸 VB6 的事情。

我尝试将vbNull 替换为其他值,但由于我上面提到的属性的空虚限制,所有这些都给出了例外:

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

更新

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

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

来源:VB.NET - string of nulls

【问题讨论】:

  • .NumberDecimalSeparator = ChrW(&H200B)
  • Hans 建议使用 zero-length space - 这是一个未显示的字符 - fileformat.info/info/unicode/char/200B/index.htm
  • VB6 的 VbNull 不会像您认为的那样做。它用于比较对象的 VarType(也就是现代的 GetType)。 VbNull 相当于 NET 中的 Nothing。
  • 我没有说它会,我是在解释它是什么。 VB.VBNull 只是常量1。在 VB6 中,它被使用如下:If VarType(foo) = vbNull 来测试空对象。 Convert.ToChar(1) 将是等效的不可打印控制字符。为了兼容性,VarType 和 VbNull 仍然存在于 NET VB 命名空间中,但建议的 零宽度空间,U+200B 将是干净的 NET 方法。
  • 不太确定“完美”。 .NumberDecimalSeparator = Microsoft.VisualBasic.vbNull 在 Option Strict 下是非法的。 This shows that 长度相同,只是 what 存储为 char(1) 不同。所以我不知道你所说的PROCESSED是什么意思。嵌入一​​个控制字符(1,vbNull)对我来说似乎很冒险。

标签: .net vb.net winforms visual-studio vb6


【解决方案1】:

触发器是正确的 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
    

    【讨论】:

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