只是想知道是否有人知道如何在VB6中实现类似NullableOfInteger的Typed Nullable类型? (我试图避免使用变体)
您可以轻松创建自定义类NullableOfInteger并使用其未初始化状态来指示Null状态,但这具有明显的缺点。
除此之外我无法想到其他任何方式?我的直觉告诉我没有好办法。
答案 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
作为默认值。