加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

vb.net – 使用可空数据类型的属性分配文本框文本

发布时间:2020-12-17 07:29:26 所属栏目:百科 来源:网络整理
导读:出于某种原因,当我尝试将可为空的十进制数据类型的属性分配给文本框文本时,我遇到了错误. 例如,我有这个Product类: Public Class Product Public Property ProductId As Integer Public Property ProductName As String Public Property [Variant] As Strin
出于某种原因,当我尝试将可为空的十进制数据类型的属性分配给文本框文本时,我遇到了错误.

例如,我有这个Product类:

Public Class Product
    Public Property ProductId As Integer
    Public Property ProductName As String
    Public Property [Variant] As String
    Public Property PackSize As Decimal?
End Class

并且Product的实例的[Variant]值为Nothing,PackSize值为Nothing.

当我尝试将[Variant]值分配给文本框时,如下所示:

VariantTextBox.Text = mProduct.[Variant]

它工作正常.

但是当我尝试将PackSize值分配给文本框时,如下所示:

PackSizeTextBox.Text = mProduct.PackSize

它会抛出此消息的异常:

Nullable object must have a value.

我不明白为什么当我这样做时会发生这种情况:

PackSizeTextBox.Text = Nothing

没有任何错误.

我尝试过其他方式做事:

PackSizeTextBox.Text = If(mProduct.PackSize,Nothing)
PackSizeTextBox.Text = If(mProduct.PackSize IsNot Nothing,mProduct.PackSize,Nothing)
PackSizeTextBox.Text = If(mProduct.PackSize.HasValue,Nothing)

但他们都抛出同样的错误.

但是,当我稍微调整它们时:

PackSizeTextBox.Text = If(mProduct.PackSize,"")
PackSizeTextBox.Text = If(mProduct.PackSize IsNot Nothing,"")
PackSizeTextBox.Text = If(mProduct.PackSize.HasValue,"")

他们奇怪地工作得很好.

最后,我真的不喜欢做长if语句只是为了获得可以为空的数据类型属性的值,所以我只是这样做:

PackSizeTextBox.Text = mProduct.PackSize?.ToString

我希望有人可以向我解释我遇到的错误.
谢谢!

解决方法

TextBox的Text属性是String类型,因此唯一可以分配给它的是String.如果您有Option Strict Off并分配除String之外的其他内容,则系统将隐式调用ToString.这意味着:

PackSizeTextBox.Text = mProduct.PackSize

与此基本相同:

PackSizeTextBox.Text = mProduct.PackSize.Value.ToString()

并且很明显,当mProduct.PackSize为Nothing时,为什么会出现错误消息.

所有这些:

PackSizeTextBox.Text = If(mProduct.PackSize,Nothing)

无法工作,因为If运算符基本上是通用的,因为返回的两个值必须是相同的类型.结果,所有Nothing返回值都隐式转换为Decimal?这些值最终必须以完全相同的结果以完全相同的方式隐式转换为String.

你最终得到的代码:

PackSizeTextBox.Text = mProduct.PackSize?.ToString

是正确的代码,因为您显式地将非String的内容转换为String,以便将其分配给String属性.这正是你应该做的,以及如果你有Option Strict On你必须要做的事情,你绝对应该这样做.

默认情况下,任何具有Option Strict Off的VB.NET开发人员都是初学者,他们不了解任何更好或更糟的开发人员.现在在项目属性和IDE选项中打开它,以便在将来的所有项目中默认为On.您应该只在特别需要后期绑定时将其关闭,即使这样,也只能在仅包含需要后期绑定的特定代码的部分类文件中将其关闭.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读