Sono curioso di sapere quali sono i pro e i contro dell'uso di if(some_value is DBNull)
rispetto a if(DBNull.Value.Equals(some_value))
. Personalmente preferisco lo if(some_value is DBNull)
perché lo trovo più leggibile. So che Microsoft consiglia di utilizzare if(DBNull.Value.Equals(some_value))
in base a https://msdn.microsoft.com/en-us/library/system.dbnull%28v=vs.110%29.aspx.è DBNull vs. DBNull.Value.Equals()
risposta
Vorrei andare per il modo DBNull.Value.Equals
.
Perché?
Beacuse is
controllerà il tipo rispetto all'uguaglianza. Deve cercare il tipo di mano sinistra e confrontarlo con il tipo di mano destra che deve anche cercare. Dopo di ciò, può confrontare i tipi, molto probabilmente controllando l'uguaglianza di riferimento.
Sarebbe meno efficiente del semplice controllo dell'eguaglianza di riferimento, che fa DBNull.Value.Equals
. Poiché esiste una sola istanza di DBNull.Value
, questo controllo è molto preciso e molto veloce.
E usare '==' o '! =' È ancora meglio e più veloce :) –
Quale sarebbe uguale a 'Equals' se sono corretto @IvanStoev Entrambi controllano l'uguaglianza di riferimento. –
Beh, non esatto. Sarà 'ReferenceEquals', cioè semplice istruzione IL. –
some_value is DbNull
: verifica il tipo di un valore_o contro il tipo di DBNull
. Questo potrebbe essere usato se fosse possibile istanziare un'istanza di DBNull
o ereditarla. Ma no, questa classe ha costruttori privati ed è sigillata.
DBNull.Value.Equals(some_value)
: assegni valore di qualche_valore rispetto al valore rappresentato da DBNull.Value
.
Quindi, che non sono pro o contro, solo una nota di cosa si tratta. Lo sappiamo già ... –
Nessun pro e contro. Entrambi confrontano cose completamente diverse: digitare in un caso e valore nell'altro. Cavalli per i corsi .... –
In generale, hai ragione. Ma nel caso DbNull il risultato è lo stesso: DbNull.Value è l'unico valore possibile di tipo DbNull. –
value is DBNull
verifichi effettivamente se value
è un'istanza della classe DBNull
, mentre value == DBNull.Value
esegue effettivamente un confronto tra value
riferimento e l'unica istanza della classe singleton DBNull
.
I value is DBNull
verifica se value
è un'istanza di DBNull
, che è possibile solo se value == DBNull.Value
, poiché DBNull
è un singoletto.
Il vantaggio dell'utilizzo di value == DBNull.Value
è che fa un confronto diretto di riferimento che sarà più efficiente rispetto alla determinazione dei tipi per il confronto is DBNull
.
- 1. Come può DBNULL non uguale DBNull
- 2. Quando si utilizza Linq, DbNull è equivalente a Null?
- 3. Linq e DBNull - Errore
- 4. ASP.Net con DBNULL
- 5. Casting DBNull to boolean
- 6. DBNull if statement
- 7. Filtro DBNull con LINQ
- 8. Utilizzo conciso di DBNull? (Ternario?)
- 9. Possibile usare ?? (l'operatore di coalesce) con DBNull?
- 10. Come posso verificare correttamente DBNull in VB?
- 11. ExecuteScalar restituisce null o DBNull (server di sviluppo o produzione)
- 12. Come impostare un campo su DBNull in Entity Framework
- 13. valutazione DBNull: verifica dell'eguaglianza o utilizzo dell'operatore 'is'?
- 14. Powershell e parametri SQL. Se stringa vuota, passare DBNull
- 15. Come risolviamo tutto questo "La conversione da tipo DBNull a tipo String non è valida" nastiness?
- 16. Perché il mio DbNull non è un singleton quando lo deserializzo utilizzando XmlSerialiser?
- 17. L'operatore "=" non è definito per il tipo "DBNull" e digitare "Intero"
- 18. Prolog è vs = con liste
- 19. Qual è la differenza tra colorWithSRGBRed vs colorWithDeviceRed vs colorWithCalibratedRed
- 20. YAML vs GPB vs JSON vs XML, che è più adatto a quali circostanze?
- 21. Come gestisco Conversione da tipo "DBNull" a tipo "String" non valido
- 22. SqlParameterCollection accetta solo oggetti di tipo SqlParameter non null, non oggetti DBNull
- 23. Come posso includere DBNull come valore nel mio set di dati fortemente tipizzato?
- 24. Come gestire l'analisi di un oggetto nullo per DateTime da utilizzare con ADO.NET come DBNULL
- 25. Codice VS per Android. È possibile?
- 26. node.js vs. mete.js qual è la differenza?
- 27. mb_strpos vs strpos, qual è la differenza?
- 28. Shim vs. Sham: Qual è la differenza?
- 29. Quale è meglio? private static vs privato
- 30. cpu vs gpu - quando cpu è migliore
non è duplicato, questa domanda è diversa da quella –