gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:42:39 26 4
gpt4 key购买 nike

出于某种原因,当我尝试将可为空十进制数据类型的属性分配给文本框文本时出现错误。

例如,我有这个产品类:

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] 值为 NothingPackSize 值为什么都没有

当我尝试将 [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, mProduct.PackSize, Nothing)

但它们都抛出相同的错误。

但是,当我像这样调整它们时:

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

他们工作得很好。

最终,我真的不喜欢仅仅为了获取可为 null 的数据类型属性的值而执行长 If 语句,因此我只是这样做:

PackSizeTextBox.Text = mProduct.PackSize?.ToString

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

最佳答案

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

PackSizeTextBox.Text = mProduct.PackSize

与此基本相同:

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

并且当 mProduct.PackSizeNothing 时您收到错误消息的原因应该是显而易见的。

所有这些:

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

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

您最终得到的代码:

PackSizeTextBox.Text = mProduct.PackSize?.ToString

是正确的代码,因为您显式地将非 String 的内容转换为 String 以便将其分配给 String属性(property)。这正是您应该做的事情,也正是您在拥有 Option Strict On 时必须做的事情,您绝对应该这样做。

任何默认使用 Option Strict Off 的 VB.NET 开发人员要么是不懂任何知识的初学者,要么是糟糕的开发人员。现在在您的项目属性和 IDE 选项中将其On打开,以便它在所有 future 的项目中默认为On。仅当您特别需要后期绑定(bind)时才应该关闭,而且即使如此,也只能在仅包含需要后期绑定(bind)的特定代码的部分类文件中将其关闭。

关于vb.net - 使用可为空数据类型的属性分配文本框文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49405669/

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