VB.Net Gotchas
VB.NET is a very user friendly language however I find its user friendliness to be quite confusing and error prone, especially when switching back and forth between C# and VB. Simple things like VB's handling of null or concatenation can lead to bugs if your not careful.
For example:
Sub Main()
Console.WriteLine("The value of Nothing is also the value of the default type: " &
(Nothing = False))
Console.WriteLine("The value of Nothing is also the value of the default type: " &
(Nothing = 0))
Console.WriteLine("The value of Nothing is also the value of the default type: " &
(Nothing = String.Empty))
Console.WriteLine("The & operator with two integers concats both: " & (3 & 4))
Console.WriteLine("The + operator with two integers adds both: " & (3 + 4))
Console.WriteLine("The + operator with two strings concats both: " & ("3" + "4"))
Console.WriteLine("The & operator with a string and an integer concats both: " &
("3" & 4))
Console.WriteLine("The + operator with a string and an integer adds both: " &
("3" + 4))
Console.WriteLine("The + operator with an integer and string adds both: " &
(4 + "3"))
Console.WriteLine("The Length of a VB.NET array starts at 1 and not 0: " &
{"Dot", "Net", "Perls"}.Length)
'Console.WriteLine("DirectCast can NOT convert types that are not inherited: " &
' DirectCast(0, System.String))
'System.IndexOutOfRangeException'
Console.WriteLine("CType can convert types that are not inherited: " &
CType(0, System.String))
'Console.WriteLine("Nothing <> String: " & (Nothing = String.Empty))
'System.IndexOutOfRangeException'
Console.WriteLine("Nothing is not string.Empty: " & (Nothing IsNot String.Empty))
'Console.WriteLine("And operator always evaluates all conditions: " &
' (1 = 2 And 0 = String.Empty))
'System.InvalidCastException
Console.WriteLine("AndAlso operator evaluates left to right conditions as needed: " &
(1 = 2 AndAlso 0 = String.Empty))
Console.WriteLine("The value of TestFunctionExitWithType is going to be the default" &
" return type: " & TestFunctionExitWithType())
Console.WriteLine("The value of TestFunctionReturn is going to be Nothing: " &
TestFunctionReturn())
Console.WriteLine("The value of TestFunctionExit is going to be Nothing: " &
TestFunctionExit())
Console.WriteLine("Parenthesis are optional in Paremeterless methods: " &
0.ToString)
Console.ReadLine()
End Sub
Sub TestSubReturn()
Return
End Sub
Sub TestSubExit()
Exit Sub
End Sub
Function TestFunctionReturn()
Return Nothing
End Function
'Compiler error: 'Return' statement in a Function, Get, or Operator must return a value.
'Function TestFunctionReturn()
' Return
'End Function
Function TestFunctionExit()
Exit Function
End Function
Function TestFunctionExitWithType() As Decimal
Exit Function
End Function
End Sub
Results:
The value of Nothing is also the value of the default type: True The value of Nothing is also the value of the default type: True The value of Nothing is also the value of the default type: True The & operator with two integers concats both: 34 The + operator with two integers adds both: 7 The + operator with two strings concats both: 34 The & operator with a string and an integer concats both: 34 The + operator with a string and an integer adds both: 7 The + operator with an integer and string adds both: 7 The Length of a VB.NET array starts at 1 and not 0: 3 CType can convert types that are not inherited: 0 Nothing is not string.Empty: True AndAlso operator evaluates left to right conditions as needed: False The value of TestFunctionExitWithType is going to be the default return type: 0 The value of TestFunctionReturn is going to be Nothing: The value of TestFunctionExit is going to be Nothing: Parenthesis are optional in Paremeterless methods: 0
Comments
Post a Comment