是否可以在VB6中实现像NullableOfInteger这样的Nullable类型

时间:2011-05-20 02:36:02

标签: vb6 nullable

只是想知道是否有人知道如何在VB6中实现类似NullableOfInteger的Typed Nullable类型? (我试图避免使用变体)

您可以轻松创建自定义类NullableOfInteger并使用其未初始化状态来指示Null状态,但这具有明显的缺点。

除此之外我无法想到其他任何方式?我的直觉告诉我没有好办法。

3 个答案:

答案 0 :(得分:8)

VB6没有运算符重载或VB.NET中可空类型使用的自定义隐式转换。你真的不能做到比变种更好。

另一种方法是选择一个特定值并始终将该值视为null。在.NET 1.0天里,人们习惯使用int.MinValue。我不知道VB6的等价物是什么,但我确定有一些东西。这有效并且听起来并不像听起来那么糟糕(但可以为空的类型更好)。

答案 1 :(得分:2)

我认为你回答了自己的问题; Nullable是一种方便 - .NET有一个实现,VB6没有(很大程度上是因为Variant)。如果你想要一个VB6的类型安全版本,你必须实现它,而且许多人都有 - 我记得在数据库API中看到这种事情的常见地方。

答案 2 :(得分:1)

另一种观点

您可以使用可选

来处理此问题,而不是 Nullable

如果您将其定义为Optional BLABLA As Integer,则它将具有默认的0值,因此如果其为null或为空,则其默认值为0 ..

这是我为自己做的一个例子!它可能会派上用场:

<强>用法:

ProgressInc ProgressBar1 'you can add other options if you want as shown below
'ProgressInc ProgressBar1, 500, 50, 25, True
'I always change Min value to 1 in my ProgressInc so if you even choose it as 0 it still gonna be 1

也是这样的

Dim TheThing As Long 

ProgressInc ProgressBar1 ,TheThing 
'See no definition about TheThing except being Long type
'cause of this its value is 0

<强>子:

Public Sub ProgressInc(ProgressBarName As ProgressBar, Optional Max As Long, Optional Min As Long, Optional Inc As Long, Optional Continues As Boolean = False)
    Dim Recent As Long

    On Err GoTo ProgressBarErr

    ProgressBarName.ShowWhatsThis

    DoEvents

    'Maximum ProgressBar Value
    If Max <> 0 Then
        ProgressBarName.Max = Max
    Else
        Max = 100
        ProgressBarName.Max = Max
    End If

    'Minimum ProgressBar Value
    If Min <> 0 Then
        ProgressBarName.Min = Min
    Else
        Min = 1
        ProgressBarName.Min = Min
    End If

    If Inc <> 0 Then Inc = Inc Else Inc = 1

    'When the ProgressBar value is at Maximum
    'Return to the Minimum value
    If Continues = True And ProgressBarName.Value = Max Then
        ProgressBarName.Value = Min
    End If

    'Checkout Recent progress (pre calculate bar value)
    Recent = ProgressBarName.Value + Inc

    If Recent >= Max Then
        'Recent value is higher than or equals to Max value
        'to avoid errors caused by this issue Value should equal to Max
        ProgressBarName.Value = Max
    ElseIf Recent < Max Then
        'Recent(pre calculated bar value) is lower than Max
        'So nothing wrong here, proceed..
        ProgressBarName.Value = ProgressBarName.Value + Inc
    End If

    Exit Sub

ProgressBarErr:

    'ProgressBar error report.
    MsgBox "With " & Err.Number & " number : '" & Err.Description & "' error occured. "

End Sub

在那里看到 Min,Max,Inc As Long ,当我不定义它们时,他们将0作为默认值。