我正在处理我的新MVC书,当然,样本都像往常一样在c#中。
有一行代码
public bool? WillAttend { get; set; }
作者解释说,问号表明这是一个可以为空的(三态)布尔,可以是真的,错误的。或者为null。 (新的C#3惯例。)
vb.net是否支持这样的约定。当然我可以在vb.net中声明一个布尔值,我可以显式地将其设置为Null(在vb.net中为Nothing)。
有什么区别。在c#中还有更多内容吗?优点
答案 0 :(得分:39)
您可以在VB中以3种方式声明可以为空的值:
Dim ridesBusToWork1? As Boolean
Dim ridesBusToWork2 As Boolean?
Dim ridesBusToWork3 As Nullable(Of Boolean)
答案 1 :(得分:23)
bool?
只是简写syntax for a nullable value type:即Nullable<bool>
Boolean?
或Nullable(Of Boolean)
。你可以像这样写一个支持属性:
Private _willAttend As Nullable(Of Boolean)
Public Property WillAttend As Nullable(Of Boolean)
Get
Return _willAttend
End Get
Set(value As Nullable(Of Boolean))
_willAttend = value
End Set
End Property
或者只使用这样的auto-implemented property:
Public Property WillAttend As Boolean?
答案 2 :(得分:3)
自.NET 2.0以来可以使用Nullables。在该版本中,Microsoft实现了Generics(Nullable是Generic类型)。从.NET 3.0开始,您可以使用?在VB.NET中(以前你只能使用Nullable(布尔))。
正如Lucas Aardvark在.NET 3.0中所说,你可以使用3个nullables声明,但在.NET 2.0中只有1个
Dim myBool as Nullable(of Boolean)
答案 3 :(得分:0)
Nullable用于值类型,如int,bools等,不支持空赋值。当方法返回整数时,这通常非常方便。如果方法的结果无效,则可以简单地将可空int设置返回null而不是负整数,这可能在长期运行中最终成为有效结果。这几乎是我想到的唯一优势。其他人已经在VB.NET中发布了如何做到这一点。我不会进入那个。