2010-08-18 49 views
7

我以前用過C#。但是,在我加入一家新公司後,我需要編寫vb.net。不過,我覺得寫它很困難。因爲我發現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仍然有效,並且沒有編譯錯誤。我真的很想知道我是否能夠檢查這種「不適當」的操作。

AndAndAlso只是案例之一。

有時候,我需要做的忽略案件的字符串比較。但是,每個人都會犯錯誤。有時,我做了

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?

+4

選項嚴格在 – 2010-08-18 23:45:24

+1

關你真的例子說明弱類型。也許動態打字。 – recursive 2010-08-18 23:54:50

+0

我知道這是舊的,但我認爲這個評論是相關的。 OP對布爾運算符和按位運算符存在誤解。 VB在這方面的工作方式與C#完全相同。在C#中你有''&&運營商短路布爾運算,你有'&'運營商對非短路布爾運算和位運算。它們與VB中的「AndAlso」和「And」類似。 C#中的'||'和'|'以及VB中的「OrElse」和「Or」也是如此。 – jmcilhinney 2017-10-18 07:57:12

回答

11

VB.Net既有強與弱類型的模式。它通過嚴格選項進行控制。這可以設置爲項目或源文件級別。

' Enable VB.Net strong typing 
Option Strict On 

' Enable VB.Net weak/dynamic typing 
Option Strict Off 
+2

哇...非常感謝你!一旦我打開它,超過1000個編譯錯誤。哈哈哈〜真的非常感謝! – 2010-08-18 23:59:23

+0

還有一個問題,你知道如何製作一個強類型的'IIf'嗎?在C#中,'?:'運算符是強類型的。 – 2010-08-19 00:06:42

+3

如果您使用Visual Studio 2008,請使用'If'而不是'IIf' IIRC – JaredPar 2010-08-19 00:09:41

0

我最近在一個較舊的vb.net項目上點擊了Option Strict按鈕,並花了好幾個小時修復類型錯誤,但它是值得的。請確保在DateTime周圍非常小心地處理字符串,並將字符串轉換爲DateTime轉換。我有幾個「12:00:00 AM」的實例粘到文本框的末尾,這會導致舊代碼庫出現問題。

一旦錯誤是明顯的,你可以在這樣昏暗的會像C#的var將選項推斷,你不必明確鍵入您所有的LINQ查詢。

(我會做出這樣的評論,但似乎我需要更多的點,不好意思)