osc*_*tin 5 vb.net dbnull default nullable ternary
虽然这个问题可能看起来像是许多问题的重复,但实际上却被问到了一个具体的原因.拿这个代码,例如:
Dim n As Integer? = If(True, Nothing, 1)
Run Code Online (Sandbox Code Playgroud)
在那个代码中,三元表达式应该返回Nothing,但是它将n设置为0.如果这是C#,我可以说它default(int?)会完美地工作.现在看起来我将不得不抛弃三元并使用常规的If块,但我真的想使用三元组.
如果没有什么是真正的VB.NET等同于C#的默认值,你怎么能解释这种行为?
相当于C#的VB.NETdefault是关键字Nothing.你编写的代码只要Id.Value返回一个Integer值就可以编译得很好.
更新样本出错的原因是因为其性质Nothing.在VB.NET中Nothing是空值,它可以转换为任何类型.现在,对于If表达式,编译器必须推断返回的类型应该是什么,并且它通过查看两个值参数来完成此操作.
该值Nothing没有类型,但文字1具有类型Integer.Nothing是可转换的,Integer所以编译器确定Integer这里是最好的类型.这意味着何时Nothing被选为值,它将被解释为Integer和不被解释Integer?.
解决此问题的最简单方法是明确告诉编译器您希望1将其视为一个Integer?.
Dim n As Integer? = If(True, Nothing, CType(1, Integer?))
Run Code Online (Sandbox Code Playgroud)