gpt4 book ai didi

vb.net - 在内联 if 语句中将变量设置为空值

转载 作者:行者123 更新时间:2023-12-02 22:23:40 24 4
gpt4 key购买 nike

我正在尝试使用以下代码检查 DBNull,如果是,则将变量设置为 nothing,如果不是,则设置为 short。问题是无法将变量设置为 Nothing 而是将其设置为 0。有人知道为什么吗?

variable = If(currentRow.Item("variable") Is DBNull.Value,
Nothing, CShort(currentRow.Item("variable")))

最佳答案

如果variable声明As Short?然后代码稍作调整即可工作:您需要转换 If 的任一操作数。首先到目标类型:

variable = If(condition, CType(Nothing, Short?), CShort(…))

(您也可以强制转换第三个操作数,或两者都强制转换。)

这个转换是必要的,因为 If推导类型:如果两个结果类型不匹配,则推导一个共同类型,它是最接近的父类型,即两者都继承的类型。但是,使用 Nothing ,新规则开始发挥作用,因为就 VB 而言,Nothing已经是有效的 Short – 默认初始化的(请参阅下面的旧答案以获取解释)。所以 VB 不会尝试任何类型强制转换,它只是使用 Short作为返回值。


下面的旧答案,假设 OP 已声明 variable As Short :

您不能将值类型设置为 Nothing .如果您分配 Nothing到一个值类型,那么它将被设置为其类型的默认值——即 0对于 Short .

你可以很容易地测试这个:

Dim s as Short = Nothing
Console.WriteLine(s)

将值类型设置为 Nothing与调用其默认构造函数(New Short())或声明该类型的新变量而不初始化它相同。 C# 中的相应操作是分配 default(T) (short s = default(short))。

如果要表示null值类型,你必须使用 nullable types :

Dim s as Short? = Nothing

现在s类型为 Nullable<Short> ( Short? 是它的快捷方式)并且可以分配一个合适的 Nothing .

关于vb.net - 在内联 if 语句中将变量设置为空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13297002/

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