给文本框赋值可空数据类型属性时出错,寻求解决方法
解决可空类型/Null字符串赋值给TextBox.Text的错误问题
嘿,我来帮你捋清楚这个问题!首先看你的Product类代码,Variant是String类型,PackSize是可空的Decimal(也就是Decimal?)。你说当这俩属性都是Nothing时,赋值Variant给文本框Text属性出错——说实话,按常理String类型的Nothing直接给TextBox.Text是不会报错的,.NET会自动把它当成空字符串处理。所以我猜要么是你实际想赋值的是PackSize(可空Decimal那个),要么是代码写法上有小疏漏?
不管怎样,我把两种可能的情况和解决方案都整理好了:
第一种情况:赋值可空Decimal的PackSize时出错
当PackSize是Nothing(也就是它的HasValue为False)时,直接把它塞给TextBox.Text肯定会报错,因为可空值类型没法直接隐式转成字符串。这里有俩简单的解决办法:
方法1:用VB的If三元运算符判断
' 先检查PackSize有没有值,有就转成字符串,没有就给空字符串 txtPackSize.Text = If(product.PackSize.HasValue, product.PackSize.Value.ToString(), "")
方法2:用空合并运算符简化代码(VB 14及以上版本支持)
这个写法更简洁,先通过?.安全调用ToString(),如果PackSize是Nothing就返回Nothing,再用??把Nothing替换成空字符串:
txtPackSize.Text = product.PackSize?.ToString() ?? ""
第二种情况:确实是赋值Variant字符串时出错
如果真的是Variant这个字符串属性赋值出错,那大概率是这几个小问题:
- 你是不是把文本框的名字写错了?比如控件叫
txtVariant,你写成txtVarient了? - 赋值的时候文本框还没初始化?比如在WinForms里,控件是在
InitializeComponent()里创建的,别在构造函数之前就赋值哦 - 可以显式把
Nothing转成空字符串再赋值,保险一点:txtVariant.Text = If(product.Variant Is Nothing, "", product.Variant)
另外提个小建议:你的Variant属性用了方括号[Variant],因为Variant是VB的关键字,这么写没问题,但如果能改成ProductVariant这种非关键字的名字,后续写代码会更省心,避免混淆~
内容的提问来源于stack exchange,提问作者Nico Dumdum
相关产品推荐
相关产品推荐

