Home Page Home Page Tips & Tricks Utilizzare l'operatore OrElse in VB.NET

Utilizzare l'operatore OrElse in VB.NET


Una delle tante novità del linguaggio introdotte in VB.NET, in questo momento siamo alla versione 2005, è stata quella dell'operatore OrElse.
Molto spesso mi è capitato in VB di dover fare dei controlli con dei banali IF ... THEN ... ELSE e trovarmi ad affrontare messaggi d'errore del tipo: "Object reference not set to an instance of an object.".
Mi spiego meglio con due righe di codice, anche se lo scenario ipotizzato non dei più appropriati e, francamente, senza molto senso, ma è solo a titolo di esempio.

Vorrei verificare, alla pressione di un Button, che il valore .Text di una TextBox sia diverso da "".
Molto semplicemente inserirò all'interno della sub Button1_Click il codice che fa al caso mio, ad esempio:

Codice .NET n°1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If textbox1.Text <> "" Then
MsgBox("ok")
End If
End Sub


Bene.
Ora supponiamo che per un qualsiasi motivo la nostra TextBox sia a Nothing, ad esempio perchè l'abbiamo aggiunta a runtime e non l'abbiamo ancora istanziata:

Codice .NET n°2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim textbox1 As TextBox = Nothing
If textbox1.Text <> "" Then
MsgBox("ok")
End If
End Sub


In questo caso il nostro codice restituirà un errore e più precisamente "Object reference not set to an instance of an object."
Fin qui tutto ok e corretto: ci siamo dimenticati un controllo e cioè quello che verifica se l'oggetto in questione è a Nothing.
Provvediamo ad aggiungerlo alla if:

Codice .NET n°3
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim textbox1 As TextBox = Nothing
If textbox1 is nothing Or textbox1.Text <> "" Then
MsgBox("ok")
End If
End Sub


Non ci siamo: ancora "Object reference not set to an instance of an object.".
Con i vecchi sistemi avrei dovuto prima testare se la TextBox fosse a Nothing e poi eseguire il controllo sulla poprietà Text, il tutto con due if distinte:

Codice .NET n°4
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim textbox1 As TextBox = Nothing
If textbox1 is nothing then
...
Elseif textbox1.Text <> "" Then
MsgBox("ok")
End If
End Sub


Fortunatamente il .NET ci viene incontro fornendoci l'operatore OrElse che, come citato dalla documentazione ufficiale, Performs short-circuiting inclusive logical disjunction on two expressions.
In parole povere fa quello che tutti si sarebbero sempre aspettati e cioè che se il primo valore non è soddisfatto è inutile passare ad analizzare il secondo!

Codice .NET n°5
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim textbox1 As TextBox = Nothing
If textbox1 Is nothing OrElse textbox1.Text = "" Then
MsgBox("ok")
end if
End Sub

Copyright © dotNetHell.it 2002-2022
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5