usar unario ternario sharp operator operadores operador logicos jerarquia ejemplos como asignacion c# nullable roslyn c#-6.0 null-conditional-operator

unario - Tratando de entender ?. operador(nulo-condicional) en C#



operadores de asignacion en c# (2)

En su primer caso ( list?.Count ), el operador devuelve un int? - un int .
El operador > se define para enteros anulables de modo que si el int? no tiene valor (es nulo), la comparación devolverá false .

En su segundo ejemplo ( a?.B ) un bool? se devuelve (porque si a es nulo, no se devuelve ni true ni false sino null ). Y bool? no se puede usar en una instrucción if ya que la instrucción if requiere un bool (no anulable).

Puede cambiar esa declaración a:

if (a?.B ?? false)

para que funcione de nuevo. Entonces, el operador de fusión nula ( ?? ) devuelve false cuando el operador condicional nulo ( ?. ) Devuelve null .

O (como sugirió TheLethalCoder):

if (a?.B == true)

Tengo este ejemplo muy simple:

class Program { class A { public bool B; } static void Main() { System.Collections.ArrayList list = null; if (list?.Count > 0) { System.Console.WriteLine("Contains elements"); } A a = null; if (a?.B) { System.Console.WriteLine("Is initialized"); } } }

La línea if (list?.Count > 0) compila perfectamente, lo que significa que si list es null , la expresión Count > 0 vuelve false por defecto.

Sin embargo, la línea if (a?.B) arroja un error de compilación que dice que no puedo convertir bool? implícitamente bool? bool

¿Por qué uno es diferente del otro?


  • list?.Count > 0 : Aquí comparas un int? a un int , produciendo un bool , ya que los operadores de comparación levantados devuelven un bool , no un bool? .
  • a?.B : Aquí, ¿tienes un bool? . if , sin embargo, requiere un bool .