Convertir esta sentencia a C#

28/08/2007 - 21:19 por Limberg | Informe spam
If IsNothing(obj) Or obj Is DBNull.Value Then

Atte.
Limberg.

Preguntas similare

Leer las respuestas

#6 Alberto Poblacion
02/09/2007 - 20:52 | Informe spam
"Octavio Hernandez" wrote in message
news:
El problema es que Value no es una clase, sino un campo estático de la
clase DBNull. Por tanto, no se puede utilizar "is" ahí.
La manera correcta de hacer la segunda comparación es:

obj == DBNull.Value



Tienes toda la razón. Estaba yo convencido de haber usado montones de
veces lo de "campo is DBNull.Value", pero me he puesto a buscarlo en los
programas que tengo hechos y, efectivamente, lo que tengo puesto es
"campo=ÛNull.Value". No sé por qué me he empeñado en lo del "is".
Respuesta Responder a este mensaje
#7 Alhambra Eidos Kiquenet
03/09/2007 - 09:50 | Informe spam
Hola,

de estas formas, cuál sería la más conveniente (quizá más rendimiento o más
eficiente ) ??

1.) if (obj==null || obj == DBNull.Value)

2.) if (obj==null || obj is DBNull)

3.) if (obj == null || Convert.IsDBNull( obj );

Realmente si se trabaja con datos de la base de datos, la comprobación obj
== null sobraría, pues si el campo en base de datos es NULL, el valor que se
tendría sería DBNull.

Saludos. Y Gracias.
Respuesta Responder a este mensaje
#8 Alfredo Novoa
03/09/2007 - 15:30 | Informe spam
Hola Alberto,

On Wed, 29 Aug 2007 08:01:29 +0200, "Alberto Poblacion"
wrote:

if (obj==null || obj is DBNull.Value)

En primer lugar hemos puesto el "o lógico" (||) en lugar del "o binario"
(|),



Los dos son el mismo operador lógico, solo que cuando usamos el de las
dos barras le decimos al compilador que no es necesario evaluar la
condición de la derecha si la condición de la izquierda es verdadera.

Es más que nada una directriz de compilación. De hecho en Delphi se
logra lo mismo usando directrices de compilación.

y luego hemos puesto el operador "is" en lugar de la comparación "==".
El "is" devuelve true si "obj" es de la clase DBNull.Value o cualquier clase
hija de la misma, mientras que el "==" aplicado a la mayor parte de los
objetos solo devuelve true si los dos apuntan a la misma dirección en
memoria (es decir, llama al Equals de Object, que si no tiene un override, a
su vez llama a ReferenceEquals).



Pero en este caso da igual por que DBNull es una clase sellada y Value
es una propiedad estática.


Saludos
Alfredo
Respuesta Responder a este mensaje
#9 Octavio Hernandez
04/09/2007 - 10:30 | Informe spam
Hola, Alfredo!

Es más que nada una directriz de compilación. De hecho en Delphi se
logra lo mismo usando directrices de compilación.



Personalmente me gusta más como es en C#, se ve en el código fuente lo
que uno quiere hacer...

Slds - Octavio
Respuesta Responder a este mensaje
#10 Alfredo Novoa
04/09/2007 - 12:04 | Informe spam
Hola Octavio,

On Tue, 4 Sep 2007 10:30:26 +0200, "Octavio Hernandez"
wrote:

Es más que nada una directriz de compilación. De hecho en Delphi se
logra lo mismo usando directrices de compilación.



Personalmente me gusta más como es en C#, se ve en el código fuente lo
que uno quiere hacer...



A mi me gusta más como es en Delphi aunque sea mucho más engorroso,
por que en la práctica nunca se desactiva la evaluación por
cortocircuito (que se usa por defecto) y no te puedes confundir y
poner un | donde debería de haber un ||.

Yo creo que lo mejor sería que hubiese un solo operador y que el
compilador fuese capaz de deducir cuando se tiene que aplicar la
evaluación por cortocircuito y cuando no.


Saludos
Alfredo
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida