因此,作为这场全局金融 Storm 的直接结果,我明天将开始一份 VB.net 开发人员的新工作。到目前为止,我一直在用 C# 进行开发(到处都是 java、vb6、sql、tibco 等)
所以问题是,需要注意哪些陷阱?有人对编写好的 vb.net 代码有什么好的建议吗?
(任何其他关于应对薪水/前景下降的建议都欢迎但不是必需的 ;-))
只是快速更新,公司看起来真的很好,当前的代码库似乎质量很高。我开始适应 VB 的做事方式(尽管我无法阻止自己到处添加分号!)。再次感谢大家的有益建议。
严格选项
在 VB 中要做的最重要的事情,以我(绝对不谦虚)的观点是使用 Option Strict On
在任何时候(除了,在每文件基础,当非严格类型有意义时,例如因为您使用 PIA 与 MS Office 互操作)并在 VS 选项中启用它。
Option Strict On
与 Option Explicit On
一起提供与 C# 大致相同的行为。关闭后,它会在编译时删除大量类型检查,并允许在完全不相关的类型之间进行虚假的、不必要的和难以调试的隐式转换。
Option Strict Off
在使用 COM API 时很有意义。 Option Explicit Off
never 有意义。它很愚蠢(主要是为了与 VB6 兼容)。
比较:=
与 Is
另一件需要注意的事情:平等与引用测试。在 C# 中,您对两者都使用 ==
。在 VB 中,您有不同的运算符:
Dim StringA = "Hello"
Dim StringB = Console.ReadLine()
Dim EqualContent = StringA = StringB
Dim EqualRefs = StringA Is StringB
现在根据用户输入,EqualContent
可能是 True
; EqualRefs
将始终为 False
。请注意,此处的 Is
在语义上等同于以下 C# 代码(通常没有人编写):
var equalRefs = object.ReferenceEquals(stringA, stringB);
我实际上认为这是 VB 相对于 C# 的优势,但很少需要。 Is
的反义词是 IsNot
。这里要注意的另一件事是,通过 =
运算符进行的字符串比较实际上调用了 VB 运行时方法:Microsoft.VisualBasic.CompilerServices.Operators.CompareString
。
这考虑了其他几个设置,尤其是 Option Compare
设置,它可能是 Binary
(默认,行为类似于 C#)或 Text
(不区分大小写的比较)。
CType
与 DirectCast
和 TryCast
在其他一些情况下也会调用 VB 运行时,其中一个值得注意的是 CType
,它是 VB 中的通用转换运算符。我倾向于避免使用运算符,我强烈建议任何人都这样做,以支持其他更明确的转换。这样做的原因是 CType
在应用时会尝试几种语义上非常不同的转换。这使得很难跟踪代码中到底发生了什么,可能会引入输入错误。
一方面,CType
允许将字符串解析为数字。这是一个通过 NumberType
.Parse
操作更好地表达的概念,就像在 C# 中一样。
我建议使用 DirectCast
,而不是 CType
,它相当于 C# 的转换,或者 TryCast
,它与 C# 的相同作为
转换。
另一个陷阱。当检查对象 x
是否具有特定类型 T
时,必须使用以下语法:
If TypeOf x Is T Then …
请注意,这不会调用正常的引用比较运算符 Is
。相反,它使用自己的运算符构造 TypeOf … Is …
。不过,您不能写 TypeOf … IsNot …
。这可能是规范中的错误。
杂项。 ...
还有很多差异,一些有用(例如 Select Case
语句中的差异)和一些较少(例如用于基本通配符匹配的 Like
运算符……只是请改用正则表达式)。
其他一些与此相关的问题: