Tout ce que je veux faire, c'est vérifier si un objet est nul, mais quoi qu'il fasse, s'il compile, il jette un NullReferenceException
juste essayer de vérifier! Voici ce que j'ai fait:
If ((Not (comp.Container Is Nothing)) And (Not (comp.Container.Components Is Nothing))) Then
For i As Integer = 0 To comp.Container.Components.Count() - 1 Step 1
fixUIIn(comp.Container.Components.Item(i), style)
Next
End If
If ((Not IsDBNull(comp.Container)) And (Not IsDBNull(comp.Container.Components))) Then
For i As Integer = 0 To comp.Container.Components.Count() - 1 Step 1
fixUIIn(comp.Container.Components.Item(i), style)
Next
End If
If ((Not IsNothing(comp.Container)) And (Not IsNothing(comp.Container.Components))) Then
For i As Integer = 0 To comp.Container.Components.Count() - 1 Step 1
fixUIIn(comp.Container.Components.Item(i), style)
Next
End If
If ((Not (comp.Container Is DBNull.Value)) And (Not (comp.Container.Components Is DBNull.Value))) Then
For i As Integer = 0 To comp.Container.Components.Count() Step 1
fixUIIn(comp.Container.Components.Item(i), style)
Next
End If
J'ai parcouru les livres VB, cherché dans plusieurs forums et tout ce qui DEVRAIT fonctionner ne fonctionne pas! Désolé de poser une telle question, mais j'ai simplement besoin de savoir.
Juste pour que vous sachiez, le débogueur dit que l'objet null est comp.Container
Changez votre And
s en AndAlso
s
Un standard And
testera les deux expressions. Si comp.Container a la valeur Nothing, la deuxième expression lève une exception NullReferenceException car vous accédez à une propriété sur un objet null.
AndAlso
court-circuitera l'évaluation logique. Si comp.Container vaut Nothing, la deuxième expression ne sera pas évaluée.
Votre code est beaucoup plus encombré que nécessaire.
Remplacer (Not (X Is Nothing))
avec X IsNot Nothing
et omettez les parenthèses extérieures:
If comp.Container IsNot Nothing AndAlso comp.Container.Components IsNot Nothing Then
For i As Integer = 0 To comp.Container.Components.Count() - 1
fixUIIn(comp.Container.Components(i), style)
Next
End If
Beaucoup plus lisible. ... Notez également que j’ai supprimé le fichier redondant Step 1
et le probablement redondant .Item
.
Mais (comme indiqué dans les commentaires), les boucles basées sur des index sont de toute façon hors de mode. Ne les utilisez pas sauf obligation absolue. Utilisation For Each
au lieu:
If comp.Container IsNot Nothing AndAlso comp.Container.Components IsNot Nothing Then
For Each component In comp.Container.Components
fixUIIn(component, style)
Next
End If