2009-03-09 8 views
6

¿Hay alguna razón por la que deba elegir uno de estos sobre el otro? ¿O realmente no importa?Linq2Sql: ¿Tiene HasValue y! = Null, funciona igual para los tipos anulables?

var a = data.Cars.Where(ø => ø.LicensePlate != null); 

var b = data.Cars.Where(ø => ø.LicensePlate.HasValue); 

he utilizado != null antes, pero empezando a pensar que tal vez debería cambiar, ya que HasValue tipo de lee mejor. ¿Qué piensan ustedes? ¿Hay alguna diferencia en absoluto? ¿Aparte de un personaje extra? Cualquier diferencia de rendimiento? Diferencias Sql?

+3

Me gusta el uso del noruego Ø como un identificador en el código. :) – KristoferA

+0

@ KristoferA-Huagati.com Yo también, ya que previene el autocompletado para que surjan otras cosas. 'x' generalmente también funciona para esto, pero nunca uso' ø' o nada que empiece con esa letra para cualquier otra cosa :) – Svish

Respuesta

12

No, ambas declaraciones son los mismos y se debe elegir el que le sea más fácil de leer.

Algo interesante a destacar es que el compilador reemplazará null comparaciones en un Nullable<T> con una llamada a HasValue. En otras palabras esto:

class Program 
{ 
    static void Main() 
    { 
     int? i = 0; 

     Console.WriteLine(i != null); 
     Console.WriteLine(i.HasValue); 
    } 
} 

se compila a esto:

private static void Main() 
{ 
    int? i = 0; 
    Console.WriteLine(i.HasValue); 
    Console.WriteLine(i.HasValue); 
} 
+1

nice! ¿Cómo ves el resultado de una compilación así? – Svish

+1

Utilicé Reflector para analizar el conjunto - http://www.red-gate.com/products/reflector/ –

Cuestiones relacionadas