NullableTypes y operadores

30/10/2007 - 22:49 por news.microsoft.com | Informe spam
Hola grupo:

Estuve mirando un poco los tipos anulables y la verdad estoy sorprendido
sobre algunos resultados.
Ejemplo:

Nullable<Int32> nullableOne = 1;
Nullable<Int32> nullableNull=null;
Console.WriteLine(nullableOne > nullableNull); => False
Console.WriteLine(nullableOne == nullableNull); => False
Console.WriteLine(nullableOne < nullableNull); => False

Console.WriteLine(nullableOne >= nullableNull); =>False
Console.WriteLine(nullableOne < nullableNull);=>False

La verdad hubiera supuesto que la comparacion de una variable con un valor
no nulo y otra con un valor nulo, desconocido, daría como resultado Null.
En las ultimas dos lineas, yo hubiera supuesto que si se compara si una
variable es mayor o igual a otra y devuelve false, entences esa variable
sería menor.

Bueno y este ultimo es terrible

Nullable<Int32> firstNull = null;
Nullable<Int32> lastNull=null;
Console.WriteLine(firstNull == lastNull); =>True
Console.WriteLine(firstNull >= lastNull); =>False

La primer comparacion, da true, ahora resulta que si son iguales, pero la
comparación de mayor o igual da falso.
Alguien sabe si esto lo van a arreglar o es el comportramioento deseado??

Saludos

Preguntas similare

Leer las respuestas

#1 news.microsoft.com
30/10/2007 - 23:23 | Informe spam
ok,

Yo no veo dos valore posibles, si se está comparando un valor bool
con nu valor desconocido, el resultado no puede ser ni verdadero ni falso,
ya que hay un valor desconocido, el resultado a mi parecer debería ser
desconocido.
ya que no hay forma de saber si un valor conocido es mayor o menor o iguala
uno desconocido.
Esto es lo que sucede, por lo menos, cuando se trabaja con bases de datos.
Por ejemplo

SELECT True And Null AS resultado
SELECT 1 >= Null AS resultado;
SELECT 1 < Null AS resultado;

devuelven Null


escribió en el mensaje
news:
yo no le veo ningun problema por lo meno yo no esperaria en mi vida
como desarrollador que el resultado de comparar dos variables nunca
esperaría ke me devolviera un valor null ya ke la comparación siempre
dará como resultado los dos únicos valores posiblres falso o verdadero
nunca un valor desconocido

y conrespecto a lo último tampoco leveeo nada raro si tengo un string
s1= null y string s2= null y luego los comparara de essa forma
s1 == s2 esperaria ke me dijera verdadero
talvez lo último sea discutible
firstNull >= lastNull); =>False
ke tede false? porke no verdadero? pero es mejor falso ya ke creo ke
no se deberia comparar dos valores null
Respuesta Responder a este mensaje
#2 jcpc91
31/10/2007 - 03:58 | Informe spam
yo no le veo ningun problema por lo meno yo no esperaria en mi vida
como desarrollador que el resultado de comparar dos variables nunca
esperaría ke me devolviera un valor null ya ke la comparación siempre
dará como resultado los dos únicos valores posiblres falso o verdadero
nunca un valor desconocido

y conrespecto a lo último tampoco leveeo nada raro si tengo un string
s1= null y string s2= null y luego los comparara de essa forma
s1 == s2 esperaria ke me dijera verdadero
talvez lo último sea discutible
firstNull >= lastNull); =>False
ke tede false? porke no verdadero? pero es mejor falso ya ke creo ke
no se deberia comparar dos valores null
Respuesta Responder a este mensaje
#3 jcpc91
31/10/2007 - 17:10 | Informe spam
vaya yo no sé mucho de sql pero eso para mi si ke está raro me
pregunto como trabajas con tu condición por ejemplo en un ifelse
la estructura del if...else if. else es de dos opciones hasta
donde conozco me pregunto como le haras desde sql con la estructura de
la condición if.else if..else para el caso de ke el valor sea
desconocido no comozco dentro de la estructura if.else una tercera
o cuarta ke diga ke en caso de ke el valor sea desconocido
Respuesta Responder a este mensaje
#4 hugo
31/10/2007 - 18:41 | Informe spam
Podrías primero evaluar si determinada variable es nula, y en caso
contrario, recien ahi evaluar las demas condiciones.
Tambien podrías utilizar
switch (variable) {
null:
x:
y:
}


escribió en el mensaje
news:
vaya yo no sé mucho de sql pero eso para mi si ke está raro me
pregunto como trabajas con tu condición por ejemplo en un ifelse
la estructura del if...else if. else es de dos opciones hasta
donde conozco me pregunto como le haras desde sql con la estructura de
la condición if.else if..else para el caso de ke el valor sea
desconocido no comozco dentro de la estructura if.else una tercera
o cuarta ke diga ke en caso de ke el valor sea desconocido
Respuesta Responder a este mensaje
#5 Hernan
01/11/2007 - 13:09 | Informe spam
Estuve mirando un poco los tipos anulables y la verdad estoy sorprendido
sobre algunos resultados.

La verdad hubiera supuesto que la comparación de una variable con un valor
no nulo y otra con un valor nulo, desconocido, daría como resultado Null.

En las ultimas dos lineas, yo hubiera supuesto que si se compara si una
variable es mayor o igual a otra y devuelve false, entonces esa variable
sería menor.

La primer comparación, da true, ahora resulta que si son iguales, pero la
comparación de mayor o igual da falso.

Alguien sabe si esto lo van a arreglar o es el comportamiento deseado??



A mí me sorprende tu sorpresa. ;-)

Como regla general, lo única comparación que deberías hacer con un
objeto nulo es compararlo con nulo. En C# no hay valor "booleano
desconocido" o es true o es false. Aquí *no* existe la lógica
trivaluada.

Tendrías que inventarte algo como Nullable<bool>, sobrecargar todos
los
operadores de comparación para que lo utilicen...Y ni así, porque
¿Cómo los usarías en expresiones o sentencias que esperan un bool.?

Resumiendo. Usa los Nullable con cuentagotas. Para lo que pueden
servir se quedan cortos.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida