Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

236
Vistas
¿Por qué el operador 'es' de C# da un resultado correcto al comparar dos valores booleanos y debería usarlo?

Me di cuenta de que este operador is los mismos resultados e incluso compila lo mismo (ver esta esencia ) que el operador == . ¿Es este un uso correcto del operador is dado que solo puedo ver cosas relacionadas con la prueba de tipos en tiempo de ejecución en los documentos?

 bool test = false; if(!test) { // some code } //OR if(test is false) { // some code }
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Es válido porque es parte de la función de coincidencia de patrones. Pero como @Jon Skeet ya respondió, no es convencional usarlo para verificar la igualdad con las variables booleanas. En C# 9, su caso de uso común es comprobar varias condiciones a la vez, como

 int x = Random.Next(50); if (x is >5 and <17) //do something

Sin embargo, es azúcar sintáctico principalmente.

over 4 years ago · Santiago Trujillo Denunciar

0

Sí, es completamente válido, es un patrón constante . En ese sentido, es "correcto". No es un detalle de implementación o un error por parte del compilador.

Sin embargo, es bastante poco convencional usarlo de esta manera dentro de una declaración if : los patrones constantes se usan más comúnmente en declaraciones o expresiones de cambio.

Sin embargo, no son completamente equivalentes. La coincidencia de patrones con is no realiza conversiones personalizadas en el lado izquierdo del operador is . Así que toma este ejemplo:

 using System; using System.Text; struct MyBool { public bool Value { get;} public MyBool(bool value) => Value = value; public static implicit operator bool(MyBool value) => value; } class Test { static void Main() { MyBool x = new MyBool(true); // Valid: uses the implicit conversion from MyBool to bool Console.WriteLine(x == true); // Invalid Console.WriteLine(x is true); } }

El mensaje de error de la última declaración es quizás un poco confuso:

error CS0029: no se puede convertir implícitamente el tipo 'bool' a 'MyBool'

Eso se debe a esta parte del comportamiento del patrón constante :

Cuando el valor de entrada no es un tipo abierto, la expresión constante se convierte implícitamente al tipo de la expresión coincidente; si el tipo del valor de entrada no es compatible con el patrón con el tipo de la expresión constante, la operación de coincidencia de patrón es un error.

Curiosamente, si agrega una conversión de bool a MyBool , el error cambia:

error CS0150: Se espera un valor constante

Pero fundamentalmente no es válido, de todos modos.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda