Obtener " Nombre de elemento de tupla se infiere. Utilice la versión de idioma 7.1 o superior para acceder a un elemento por su nombre inferido."


Tenemos el siguiente código que ha estado funcionando bien en nuestra aplicación UWP hasta hoy después de actualizar Visual Studio 2017 a la última 15.3.

private void Test()
{
    var groups = new List<(Guid key, IList<(string, bool)> items)>();

    var items = new List<(string, bool)>
    {
        ("a", true),
        ("b", false),
        ("c", false)
    };
    var group = (Guid.NewGuid(), items);

    groups.Add(group);
}

No hay ningún mensaje de error, pero esto en la ventana de salida

Se infiere el nombre del elemento de tupla 'items'. Por favor, utilice la versión de idioma 7.1 o superior para acceder a un elemento por su nombre inferido.

¿Alguna idea de por qué y cómo solucionar esto?

Author: Jessica, 2017-08-15

3 answers

Proyecto - > Propiedades->Compilación->Avanzado->Versión de idioma - > C# última versión menor

 49
Author: John Stewien,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-16 06:45:35

Este es un error confirmado, introducido en 15.3. La corrección se enviará como parte de una versión de mantenimiento (15.3.2).

El problema se rastrea en https://github.com/dotnet/roslyn/issues/21518

 10
Author: Julien Couvreur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-30 20:46:25

Parece que esto es un cambio de ruptura en C# 7.1. (como señaló @JulienCouvreur, esto es en realidad un error, pero la solución a continuación debería seguir funcionando).


Solución alternativa

Intente dar un nombre (por ejemplo, use el mismo nombre items de IList<(string, bool)> items para ser consistente) explícitamente a items (es decir, la instancia de lista).

var group = (Guid.NewGuid(), items: items);
 6
Author: Justin XL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-16 11:29:23