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

时间:2012-04-19 18:45:23

标签: vb.net default nullable dbnull ternary

  

可能重复:
  Bug?? If you assign a value to a nullable integer via a ternary operator, it can't become null

虽然这个问题似乎与许多问题重复,但实际上却被问到了一个具体的原因。拿这个代码,例如:

Dim n As Integer? = If(True, Nothing, 1)

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

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

1 个答案:

答案 0 :(得分:6)

与{C} default等效的VB.NET是关键字Nothing。只要Id.Value返回Integer值,您编写的代码就可以编译得很好。

您更新的示例出错的原因是Nothing的性质。在VB.NET中Nothing是空值,它可以转换为任何类型。现在对于If表达式,编译器必须推断返回的类型应该是什么,并且它通过查看两个值参数来实现。

Nothing没有类型,但文字1的类型为IntegerNothing可转换为Integer,因此编译器确定Integer是此处的最佳类型。这意味着当选择Nothing作为值时,它将被解释为Integer而不是Integer?

解决此问题的最简单方法是明确告诉编译器您希望将1视为Integer?

Dim n As Integer? = If(True, Nothing, CType(1, Integer?))