之前我使用过C#。但是,在我加入一家新公司后,我需要编写vb.net。但是我觉得很难写。因为我发现vb.net不是强类型的。它真的不是强类型的吗?或者任何设置?以下是一些例子。
If (Me.Check1() And Me.Check2()) Then
根据我的C#知识,一旦Me.Check1()
返回false,就不会执行Me.Check2()
。但是我错了。 And
用于按位运算。我应该使用AndAlso
进行布尔运算。所以它应该是
If (Me.Check1() AndAlso Me.Check2()) Then
问题是If (Me.Check1() And Me.Check2()) Then
仍然有效且没有编译错误。我真的想知道我是否能够检查这种“不恰当”的操作。
And
和AndAlso
只是其中一个案例。
有时,我需要忽略案例字符串比较。但是,每个人都会犯错误。有时,我做了
If (String.Compare(Me.string1, Me.string2, True)) Then
我想每个人都知道这个问题。它应该是
If (String.Compare(Me.string1, Me.string2, True) = 0) Then
但是,在编译期间我仍然无法检查这种情况。
我喜欢C#,因为它有助于我们在编译过程中发现许多问题。但是,VB.NET让我非常困惑,并且必须在运行时和测试期间确定许多错误。
还有一个例子是
Public Sub MySub(ByVal obj as Object)
Console.WriteLine(obj.MyProperty)
End Sub
在vb.net中,这种语句仍然有效。为什么?为什么?为什么?有谁知道如何使用像C#一样的vb.net?
答案 0 :(得分:12)
VB.Net有强类型和弱类型。它通过Strict选项控制。这可以在项目或源文件级别设置。
' Enable VB.Net strong typing
Option Strict On
' Enable VB.Net weak / dynamic typing
Option Strict Off
答案 1 :(得分:0)
我最近在旧的vb.net项目上点击Option Strict按钮并花了几个小时修复类型错误,但这是值得的。确保在DateTime周围非常小心地使用字符串,并将字符串转换为DateTime转换。我有几个“12:00:00 AM”的实例被添加到文本框的末尾,这会导致旧代码库出现问题。
一旦错误清除,您可以打开Option Infer,这样Dim就会像c#的var一样工作,而且您不必显式键入所有Linq查询。
(我已将此作为评论,但似乎我需要更多积分,抱歉)