Tänkte skriva lite om två andra nyheter, nämligen nullable types och binary IF.
En nyhet är att man kan göra objekt till "nullable" genom att sätta ett frågetecken efter typdeklarationen av variabeln. För att göra en integer till nullable så gör man alltså så här:
Dim Count As Integer?
Detta gör att du kan testa om värdet är satt eller ej, till exempel på det här viset:
If Count Is Nothing Then MsgBox("Has no value")
Eller
If Count.HasValue = False Then MsgBox("Has no value")
En nullable type för två extra readonly propertys: HasValue och Value som kan användas för att undersöka om variabeln är satt eller är nothing.
Ihop med den nya Binary IF som påminner om gamla IIF(testexpression,falsepart,truepart) så kan man till exempel tilldela ett defaultvärde när man använder en nullable type:
Private b As Integer?
Private Sub test()
Me.Text = If(b, 4).ToString ' Returns 4 if b is null/nothing else returns b End Sub
Binary IF har en overload så antingen kan man skicka in If (Testexpression As object, truepart As object) eller If(Testexpression As boolean,falsepart As object, truepart As object) i första fallet så förväntar den sig ett objekt av nullable type eller av reference type. Skickar man in en variabel av nullable type och den är null/nothing så kommer falsepart att returneras, är den ej null/nothing så returnerar den sig själv.
Nedanstående kommer att returnera 4 första gången Test() körs och 55 andra gången.
Private b As Integer?
Private Sub Test()
Me.Text = If(b, 4).ToString ' Returns 4 if b is null/nothing else returns b
b = 55
End Sub
Detta fungerar såklart på andra objekt också, t.ex:
Private b As Object = Nothing
Private Sub Test()
Me.Text = If(b, 5).ToString
b = New Button With {.Name = "Min nya knapp"}
End Sub
Första gången Test() körs kommer me.text bli "5" andra gången kommer Me.Text bli objektets namn, i det här fallet "System.Windows.Forms.Button, Text: ". Små små saker som kanske inte verkar vara så speciella, men som i realiteten ändrar en hel del på hur man kan bygga upp sina program logiskt. Undersök dem gärna mer.
Återkommer med LINQ och LAMDA expressions som är ganska så mindblowing när man börjar greppa det. I alla fall för mig.