2011-03-24 22 views
5

¿Cómo se sustituye el códigoC# - corta cheque por nula

if (customer.Person!=null) 
Console.WriteLine(customer.Person.Name); 

siguiente con algo como esto

Console.WriteLine(customer.Person.Name?? "unknown"); 

Respuesta

11

No se puede, me temo - no hay nada como null- de Groovy operador de desreferenciación segura :(

Supongo que podría crear un "objeto nulo" para Persona, es decir, una instancia real, pero con todas las propiedades nulas. Entonces podría usar:

Console.WriteLine((customer.Person ?? Person.Null).Name ?? "Unknown"); 

... pero eso es bastante horrible. (Tampoco está comprobando customer siendo nula.)

Otra opción sería escribir un método de extensión de la persona:

public static string NameOrDefault(this Person person, string defaultName) 
{ 
    return person == null ? defaultName : person.Name ?? defaultName; 
} 

continuación:

Console.WriteLine(customer.Person.NameOrDefault("Unknown"); 
+0

¿Qué significa "Person.Null"? – Alexandre

+0

@Alex: Esa sería una propiedad estática en la clase Persona, que devuelve la referencia de persona especial "objeto nulo", que tiene todas sus propiedades nulas. –

+0

@Alex: es una propiedad estática que devuelve una instancia de Persona que representa "ninguna persona". Este es el [patrón de objeto nulo] (http://en.wikipedia.org/wiki/Null_Object_pattern). – Richard

5

podría utilizar el ternary operator:

Console.WriteLine(customer.Person != null ? customer.Person.Name : "unknown"); 

No es el código más atractivo, pero aún un trazador de líneas.


Editar: No se olvide de usar IsNullOrWhiteSpace, en caso de que trata la lógica aplicación vacía & cadenas nulas las mismas.