(any == System.dbnull.value) vs (qualquer é System.dbnull)
Pergunta
Alguém tem uma preferência sobre como verificar se um valor é DBNull
? Descobri que essas duas declarações me dão os resultados que quero, mas apenas me perguntando se há uma preferência?
if (any is System.DBNull)
igual a:
if (any == System.DBNull.Value)
Obrigado!
Solução
if (any == System.DBNull.Value) ...
Eu prefiro isso, simplesmente porque li isso como comparação de valores, não tipos.
Outras dicas
Eu costumo usar
if (DBNull.Value.Equals(value)) {
//
}
ou
if (Convert.IsDBNull(value)) {
//
}
is
Não usa a reflexão, como diz Kevlar623. Ele mapeia para o isinst
Operação em IL. Nesse nível, comparar o desempenho é absolutamente bobo, a menos que você esteja trabalhando em um sistema de orientação de mísseis.
eu uso value is DBNull
. Parece certo e, como um desenvolvedor paranóico, não posso confiar que o único valor já existente seja DBNull.Value
. Bugs acontecem.
Se você estiver em C#, deve usar ==
; is
usa a reflexão que é mais cara para calcular, especialmente porque há apenas uma instância de System.DBNull
.
Eu gosto do "Is System.dbnull" mais porque odeio a idéia de comparar algo com NULL e fazê -lo ser verdadeiro. Muitas outras sintaxes (o que diabos é o plural disso?) Teria alguma coisa == NULL Return null.
Eu entendo que há dbnull.value por um motivo. Eu sei. Estou listando minha preferência :)
Este é um bom exemplo de forma segue a função. Qualquer que seja executado com mais eficiência, é o caminho a percorrer. O que parece, se diz ou nomes ruins que você chama é irrelevante. Use o idioma com eficiência, não molde o idioma em um novo.