web-dev-qa-db-fra.com

Obtenir "Le nom de l'élément tuple est déduit. Veuillez utiliser la version linguistique 7.1 ou supérieure pour accéder à un élément par son nom déduit."

Nous avons le code suivant qui a bien fonctionné dans notre application UWP jusqu'à aujourd'hui après avoir mis à jour Visual Studio 2017 au plus tard 15..

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);
}

Il n'y a pas de message d'erreur mais cela dans la fenêtre de sortie

Le nom d'élément de tuple 'items' est déduit. Veuillez utiliser la version linguistique 7.1 ou supérieure pour accéder à un élément par son nom présumé.

Une idée pourquoi et comment résoudre ce problème?

40
Jessica

Projet-> Propriétés-> Build-> Advanced-> Version de langue-> C # dernière version mineure

69
John Stewien

C'est un bug confirmé, introduit dans 15.3. Le correctif sera livré dans le cadre d'une version de maintenance (15.3.2).

Le problème est suivi à https://github.com/dotnet/roslyn/issues/21518

10
Julien Couvreur

On dirait que c'est un rupture de changement en C # 7.1. (comme l'a souligné @JulienCouvreur, il s'agit en fait d'un bug, mais la solution ci-dessous devrait toujours fonctionner).


Solution

Essayez de donner explicitement un name (par exemple, utilisez le même nom items de IList<(string, bool)> items pour être cohérent) à items (c'est-à-dire l'instance de liste ).

var group = (Guid.NewGuid(), items: items);
8
Justin XL