tipos sirve sintaxis que programacion para lenguaje historia datos conversion caracteristicas c# visual-studio-2017 c#-7.0

sintaxis - para que sirve c#



¿Por qué TryParse en la sintaxis de C#7(parámetro de vaciado) emite una advertencia si lo compila? (1)

En C # 7, se te permite hacer

if (int.TryParse("123", out int result)) Console.WriteLine($"Parsed: {result}");

o - si no usa el resultado y solo quiere comprobar si el análisis tiene éxito, descarte el valor de salida:

if (int.TryParse("123", out _)) Console.WriteLine("Syntax OK");

Normalmente funciona bien, pero en Visual Studio 2017 el segundo ejemplo, donde el parámetro de out está vacío, genera la advertencia

Advertencia AD0001: Analizador ''Microsoft.CodeAnalysis.CSharp.Diagnostics.SimplifyTypeNames.CSharpSimplifyTypeNamesDiagnosticAnalyzer'' lanzó una excepción de tipo ''System.NullReferenceException'' con el mensaje ''Referencia de objeto no establecida en una instancia de un objeto.''.

Las versiones de Visual Studio donde pude verificar que ocurre es

Versión de Visual Studio Enterprise 2017 versión 15.1 (26403.7)
Versión de Visual Studio Enterprise 2017 versión 15.2 (26430.4)

¿Se trata de un error o no se admite oficialmente el uso de int.TryParse("123", out _) ? No pude encontrar ninguna pista hasta ahora.

Para completar, aquí está el código de la aplicación de consola que muestra el problema:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { class Program { static void Main(string[] args) { if (int.TryParse("123", out _)) Console.WriteLine("Syntax OK"); } } }


Envié una solicitud de error (solicitud # 19180) al equipo de desarrollo, y confirmaron que es un error. Puede ver el estado completo aquí en GitHub dotnet / roslyn.

Pilchie comentó hace 16 horas
Puedo repetir eso en 15.2, pero no en 15.3. Pasando al compilador basado en la pila,> Pero estoy bastante seguro de que esto es un dupe. @jcouv?

jcouv comentó hace 16 horas
Sí, este es un duplicado (de # 17229 y posiblemente otro también). Se solucionó en dev15.3 (# 17544) y desafortunadamente no pudimos juntar la> corrección a dev15.2. Gracias a @ Matt11 por archivar el problema y perdón por el error.

Parece que ya está arreglado y estará, por lo que entendí, disponible en la próxima actualización. Pero no hay una fecha anunciada cuando Microsoft la incluya, por lo que presenté un problema a través de "Enviar comentarios / Informar un problema" en Visual Studio 2017.

Notas:

  • El problema no se limita a TryParse. Verifiqué que también ocurre si escribe su propia función, es decir, la siguiente muestra también muestra la advertencia AD0001:

    static void Main(string[] args) { bool myOutDemo(string str, out int result) { result = (str??"").Length; return result > 0; } // discard out parameter if (myOutDemo("123", out _)) Console.WriteLine("String not empty"); }

  • Noté que ahora hay una vista previa de VS Versión 15.3 disponible, que debería contener la corrección mencionada en los comentarios de GitHub. Echa un vistazo al siguiente enlace: Visual Studio 2017 Versión 15.3 Vista previa . Después de instalarlo, verifiqué el problema nuevamente y puedo confirmar que se solucionó allí.

¡Gracias a todos los que participaron en la discusión anterior! (pregunta comentarios)