Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

237
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!