2010-04-11 12 views
5

En mi código, hay una abreviatura que puedo usar para asignar una variable al valor de la propiedad de un objeto SÓLO si el objeto no está t null?Cómo asignar un valor de una propiedad a una var SOLAMENTE si el objeto no es nulo

string username = SomeUserObject.Username;  // fails if null 

Sé que puedo hacer una verificación como si (SomeUserObject! = Null) pero creo que vi una forma abreviada de este tipo de prueba.

me trataron:

string username = SomeUserObject ?? "" : SomeUserObject.Username; 

Pero eso no funciona.

+0

En el segundo, se está pensando en tanto el operador nula coalescencia * y * el operador condicional. Desafortunadamente, has logrado combinarlos en código ilegal. Consulte las respuestas a continuación para conocer el uso del operador condicional. –

Respuesta

3

Su sintaxis en el segundo es un poco fuera.

string name = SomeUserObject != null ? SomeUserObject.Username : string.Empty; 
-1

Se llama coalescente nula y se lleva a cabo de la siguiente manera:

string username = SomeUserObject.Username ?? "" 
+1

Aún fallará si SomeUserObject es nulo. – micahtan

+0

SomeUserObject podría ser nulo. Debería estar usando el operador condicional y comprobando que su objeto es nulo. –

+0

Ustedes están en lo cierto: leí mal la pregunta, ¡lo siento! –

2

Lo más cerca que vas a conseguir, creo, es:

string username = SomeUserObject == null ? null : SomeUserObject.Username; 
1

Esto es probablemente lo más cerca que se va a obtener:

string username = (SomeUserObject != null) ? SomeUserObject.Username : null; 
1

Usted puede usar? : como otros han sugerido pero es posible que desee considerar el patrón de objeto nulo donde crea un usuario estático especial User.NotloggedIn y lo usa en lugar de nulo en todas partes.

Entonces es fácil hacer siempre .Username.

Otros beneficios: obtiene/puede generar diferentes excepciones para el caso (nulo) donde no asignó una variable y (no inició sesión) donde ese usuario no tiene permitido hacer algo.

Su NotloggedIn usuario puede ser una clase derivada de usuario, digamos NotLoggedIn que anula métodos y lanza excepciones en cosas que no se puede hacer cuando no se haya identificado, como hacer pagos, enviar correos electrónicos, ...

Como una clase derivada de usuario se obtiene un poco de azúcar sintáctica bastante agradable ya que puede hacer cosas como if (someuser is NotLoggedIn) ...

2

en C# 6.0 ahora se puede hacer

string username = SomeUserObject?.Username; 

nombre de usuario será establecido en nulo si SomeUSerObject es nulo. Si lo desea para obtener el valor "", que puede hacer

string username = SomeUserObject?.Username ?? ""; 
Cuestiones relacionadas