2010-07-09 31 views
14

Recientemente en un proyecto anterior encontré una diferencia peculiar entre VB.NET y C#.¡Nada! = Nulo, ¿o no?

Considérese la siguiente expresión # C, que:

null <= 2 

Esta expresión se evalúa como Falso que es lo que cabría esperar. Entonces la expresión correspondiente VB.NET:

Nothing <= 2 

que se sorprendió al saber que esta expresión se evalúa en realidad a verdadera

Parece que una decisión de diseño bastante fundamental entre los dos idiomas y ciertamente atrapado Sacarme.

¿Alguien puede decirme por qué? ¿Son nulos y nada lo mismo? Si es así, ¿por qué se comportan de manera diferente?

+4

'null <= 2' produce una advertencia de tiempo de compilación en C# y no se emite nunca IL correspondiente a esta operación en el conjunto de salida. –

+0

prueba una expresión en LINQPAD - imagine nulo es en realidad un int? quién es el valor que es nulo. –

+0

Pregunta relacionada (aunque no es exactamente la misma): http://stackoverflow.com/questions/2776902/why-can-you-assign-nothing-to-an-integer-in-vb-net –

Respuesta

30

Nothing en VB evalúa el valor predeterminado para un tipo determinado. (Ver this link para los detalles.)

Para una comparación número entero (que el compilador asumirá de la mano operando de la derecha), Nothing se por lo tanto ser 0. 0 <= 2 es cierto por razones más obvias :-)

+2

También vale la pena mencionar que Nothing también se utiliza para las comprobaciones nulas cuando se combinan con los operadores Is e IsNot. –

+2

Por lo completo: ¿qué hace el compilador con el código C#? '(object) null' no permite la comparación con un entero,' Int32' no puede ser nulo ...? –

+0

Me golpeaste mientras buscaba la respuesta. Y también obtuvo el mismo enlace: P –