Как получить имя элемента Tuple. Используйте язык версии 7.1 или выше, чтобы получить доступ к элементу по его выводимому имени. "

У нас есть следующий код, который отлично работает в нашем приложении UWP до сегодняшнего дня после того, как мы обновили Visual Studio 2017 до последней версии 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);
}

Нет сообщения об ошибке, но это в окне вывода

Выводится имя элемента "элементы". Пожалуйста, используйте языковые версии 7.1 или больше для доступа к элементу по его выводимому имени.

Любая идея, почему и как это исправить?

Ответы

Ответ 1

Project- > Properties- > Build- > Advanced- > Language Version- > С# last Minor Version

Ответ 2

Это подтвержденная ошибка, введенная в 15.3. Исправление будет отправлено как часть служебной версии (15.3.2).

Проблема отслеживается https://github.com/dotnet/roslyn/issues/21518

Ответ 3

Похоже, что это нарушение изменений в С# 7.1. (как указано в @JulienCouvreur, это на самом деле ошибка, но обходной путь ниже все равно должен работать).


Обход

Попробуйте указать имя (например, использовать одно и то же имя items из IList<(string, bool)> items для согласования) явно в items (т.е. экземпляр списка).

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