本书翻译目的为个人学习和知识共享,其版权属原作者所有,如有侵权,请告知本人,本人将立即对发帖采取处理。
允许转载,但转载时请注明本版权声明信息,禁止用于商业用途!
博客园:韩现龙
Introducing to Microsoft LINQ目录
Microsoft Visual Basic9.0的最终版本增强了对语言集成查询(LINQ)的支持。正如C#3.0那样,对Visual Basic9.0的改变并不需要对公共语言运行时(CLR)做任何修改。
更多信息 关于C#3.0的更多信息,请参阅第2章 “C#语言特性”
在本章中,我们将讲述一下在Visual Basic9.0中的新语法,在适当的时候将它与C#进行一下对比。在C#和VB9之间有一些差别,有一些特性并不是在二者之间都有的。即便作为一个C#程序员,也请看一下本章。可能Visual Basic 9.0的一些优点在C#中是没有的。至少我们应该能够读懂用为LINQ写的Visual Basic代码。
如果您偏爱Visual Basic,若想全面高效地理解VB9,您须对VB8的特性有一个全面的了解。读C#代码的能力对于阅读本书的其他部分(因为LINQ的例子是用C#写的)和理解C#3.0及Visual Basic 9.0之间的差别也非常重要。
Visual Basic 9.0 和 Nullable 类型
Visual Basic 9.0包括了早在C#2.0版本中已经存在的特性。这些特性之一就是可空类型-该类型在LINQ中也经常使用。因此,我们需要快速地对可空类型进行一下描述。
从对Microsoft .NET2.0的泛型介绍时开始,CLR就向程序员们提供了泛型类Nullable(Of T As Struct),这就满足了程序员们将NULL值赋值给一个值类型的要求。在声明这种类型的一个变量时,我们不必专门地为它声明一个新的类型。
为了使用此类型,C#2.0对其提供了直接支持。将?前缀到类型名称前,我们就可以使用该类型的可空泛型类了。Visual Basic9.0也用同样的语法提供了同样的功能,如Listing3-1所示:
Listing 3-1: Nullable type declaration
Dim a As Integer? = 18
Dim b As Integer? = 24
Dim c As Integer? = Nothing
Dim d As Integer?
d = a + c ' d = 18 + Nothing = Nothing
c = a + b ' c = 18 + 24 = 42
普通的Integer变量不可被指定为Nothing,因为它是“值类型”的。在Listing3-1中,我们将c指定为Nothing,并且在一个表达式中将它赋给d。a+c的结果是Noting,这说明了三值逻辑是典型的可空类型。NULL“值“(在Visual Basic中用Nothing表示)已经和一些使用逻辑操作符的异常被应用进表达式中了。
一个可空的值(nullable value)不可以被赋值给非空的类型(non-nullable type)。Listing3-2中展示了在将一个可空的值赋给非空类型时所必需的转变:
Listing 3-2: Nullable type conversions
Dim k As Integer? = 16
Dim p As Integer = k ' Compiler error
Dim q As Integer = DirectCast( k, Integer ) ' Ok
Dim r As Integer = CType( k, Integer ) ' Ok
关于Visual Basic 9.0中的可空类型的更多信息,请参阅Visual Basic的文档。我们希望这种特性广泛地应用于操作关系型数据库的代码中。