VB.NET Errore - Null Riferimento eccezione potrebbe verificarsi in fase di esecuzione quando si utilizza il risultato
-
26-10-2019 - |
Domanda
Sfondo: Ho scritto il codice che in uscita saranno tutti attualmente connesso nomi di gruppo di Active Directory dell'utente. Voglio il nome del gruppo (es: Acomp_user_BIG) tramite IdentityReference.Translate invece di SID dell'utente corrente (es: S-1-5-32-544) ha restituito via IdentityReference.Value.
Ecco il codice che ho usato:
Public ReadOnly Property Groups As IdentityReferenceCollection
Get
Dim irc As IdentityReferenceCollection
Dim ir As IdentityReference
irc = WindowsIdentity.GetCurrent().Groups
For Each ir In irc
Dim account As IdentityReference = ir.Translate(GetType(NTAccount))
Debug.WriteLine(account.Value)
Next
End Get
End Property
Purtroppo, ho l'errore sul "Fine Get":
Warning 1 Property 'Groups' doesn't return a value on all code paths.
A null reference exception could occur at run time when the
result is used.
Qualche suggerimento per la risoluzione di questo errore?
Soluzione
Public ReadOnly Property Groups As IdentityReferenceCollection
Get
Dim irc As IdentityReferenceCollection
Dim ir As IdentityReference
irc = WindowsIdentity.GetCurrent().Groups
For Each ir In irc
Dim account As IdentityReference = ir.Translate(GetType(NTAccount))
Debug.WriteLine(account.Value)
Next
**return irc**
End Get
End Property
Tuttavia, cercando in codice del IRC viene modificato in modo si dovrebbe fare una nuova IdentityReferenceCollection (ammesso che dispone di un metodo .add ()) poi fare .add (account) e restituire la tua nuova collezione
Altri suggerimenti
Il codice non restituisce nulla in uno qualsiasi dei percorsi di codice.
Non sono sicuro di ciò che si desidera per tornare, ma tornando la collezione sarebbe partita il tipo di proprietà:
Return irc
che avrebbe comunque fare la maggior parte del codice nella proprietà inutile, così forse si vuole un tipo di ritorno diverso, o forse non si vuole fare una proprietà a tutti.
Una proprietà Get
dovrebbe restituire un valore . La tua struttura non lo fa; si stanno semplicemente stampando alcune cose alla console. Questo non è ciò che un immobile è lì per.
Una proprietà Get
dovrebbe Return
qualche valore, e non dovrebbe fare molto altro ancora. Se si desidera eseguire una logica di effetti collaterali, utilizzare un Sub
. Se anche voi volete restituire un valore, utilizzare un Function
.
solo proprietà utilizzare se si desidera semplicemente di restituire un valore senza avere un calcolo con effetti collaterali.