【发布时间】:2020-10-21 14:20:13
【问题描述】:
好的,所以我对编码并不陌生,这让我觉得非常愚蠢。也许有人可以解释为什么这会失败,因为通常 VB.Net 在这种类型(双关语)的事情上是直观和灵活的?
我有一个简单的例子,我想将一个整数值为 6 的对象集传递给一个可以为空的 Int64 参数的过程。我想这样做,因为我无法更改来自对象的传入值,它是一个类的属性,很可能什么都不是,因此使用了可为空的 Int64。
Private Sub NullableParamTest(ByVal ID As Int64?)
MsgBox(ID)
End Sub
现在这样的简单示例将导致异常:
Dim objTest As Object = 6
NullableParamTest(objTest)
当对象被设置为整数并传递给具有 Int64 的过程时,为什么没有正确装箱?类型?如果我用 CInt(objTest) 包装 objTest 并首先对其进行转换,那很好,但至少在 VB 中我不需要这样做。我有可以选择将各种 ID 作为 Int64 的日志记录方法?但源是这个 Object 属性导致它失败......即使它们设置了完全有效的 Int64s。
我想避免使用整个 Optional...Int64 = Nothing,因为这并没有真正将其设置为空,因为我的 ID 永远不会为零,但它并不是真正发生的事情。
【问题讨论】:
-
Dim objTest As Object = 6&. -
@GSerg 谢谢,我相信确实如此,尤其是该帖子的答案中的链接。编译器无法即时处理转换似乎有点奇怪,我希望不必强制转换/转换,看起来像使用 Int64 知道 0 无论如何都无效或将这些参数更改为 Object是我仅有的两个选择。还要感谢 6& 符号,我不记得在任何地方都见过它,而且效果也很好!
标签: vb.net