gpt4 book ai didi

vb.net - 漏洞??如果通过三元运算符将值赋给可为 null 的整数,则它不能变为 null

转载 作者:行者123 更新时间:2023-12-02 05:44:43 26 4
gpt4 key购买 nike

dim val1 As Integer? = If(5 > 2, Nothing, 43)
' val1 = 0

dim val1 As Integer? = If(5 > 2, Nothing, Nothing)
' val1 = Nothing

什么给了?这是一个错误,还是我忽略了什么?

最佳答案

问题是 VB.NET 中的 Nothing 与 C# 中的 null 工作方式不同。当 Nothing 用于值类型(例如 Integer)的上下文中时,它表示该类型的默认值。在这种情况下,这是 0。

在您的第一个示例中,三元运算符的两个分支都是有效的 Integer 值。真分支代表0,假分支代表43。

在第二个示例中,三元运算符的两个分支都不是有效的 Integer 值,因此强制 VB.NET 编译器假定整个运算符返回 Object,不是整数

要使第一个示例按您预期的方式工作,您需要向编译器明确说明三元运算符应解析为 Integer?,而不是 Integer 或一个 Object。您可以这样做:

dim val1 As Integer? = If(5 > 2, Nothing, New Integer?(43))

通过显式地将运算符的假分支设为 Integer?,真分支中的 Nothing 将表示空值,而不是默认的 Integer 值。

关于vb.net - 漏洞??如果通过三元运算符将值赋给可为 null 的整数,则它不能变为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7181493/

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