gpt4 book ai didi

.net - 将 Nullable Integer 设置为 String Containing Nothing 会产生 0

转载 作者:行者123 更新时间:2023-12-01 11:07:02 27 4
gpt4 key购买 nike

我一直在为可空整数的一些意外行为而烦恼。

  • 如果我将 Integer 设置为 Nothing,它会按预期变为 Nothing
  • 如果我将 Integer? 设置为 NothingString,它将变为 0!

当然,无论我是否将 String 显式转换为 Integer?,我都会得到这个。

我知道我可以很容易地解决这个问题,但我想知道我错过了什么。

    Dim NullString As String = Nothing
Dim NullableInt As Integer? = CType(NullString, Integer?) 'Expected NullableInt to be Nothing, but it's 0!
NullableInt = Nothing 'This works, of course. NullableInt is Nothing.

编辑: 之前我的代码在这里,所以没有显式转换为 Integer? 并且每个人似乎都被它所吸引/弄糊涂了。有很多建议认为 Option Strict On 会捕捉到这种类型的东西。然而,这实际上是字符串到整数转换规则的一个怪癖,它早于可空类型,但仍然影响它们。

最佳答案

这里之所以与VB.Net的转换规则有关。 String 类型与 Integer? 不兼容,因此需要进行转换。不过,中间步骤是将 String 转换为 Integer。 VB.Net 转换规则会将 Nothing 或空 String 转换为 Integer 值 0。这可以在没有 nullables 的情况下重现

Dim local1 As String = Nothing
Dim local2 As Integer = local1 ' It's 0

此相同的转换会将 Integer 值 0 转换为 Integer? 类型,该类型保持 Integer 值。

关于.net - 将 Nullable Integer 设置为 String Containing Nothing 会产生 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4441967/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com