什么是VB.NET相当于C#的默认关键字?

osc*_*tin 5 vb.net dbnull default nullable ternary

可能重复:
Bug ?? 如果通过三元运算符为可空整数赋值,则它不能为空

虽然这个问题可能看起来像是许多问题的重复,但实际上却被问到了一个具体的原因.拿这个代码,例如:

Dim n As Integer? = If(True, Nothing, 1)
Run Code Online (Sandbox Code Playgroud)

在那个代码中,三元表达式应该返回Nothing,但是它将n设置为0.如果这是C#,我可以说它default(int?)会完美地工作.现在看起来我将不得不抛弃三元并使用常规的If块,但我真的想使用三元组.

如果没有什么是真正的VB.NET等同于C#的默认值,你怎么能解释这种行为?

Jar*_*Par 6

相当于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)