获取"元组元素名称是推断的.请使用语言版本7.1或更高版本来通过其推断名称访问元素."

Jes*_*ica 41 c# visual-studio uwp c#-7.0 visual-studio-2017

我们将以下代码在我们的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);
}
Run Code Online (Sandbox Code Playgroud)

输出窗口中没有错误消息

推断元组元素名称'items'.请使用语言版本7.1或更高版本通过其推断名称访问元素.

知道为什么以及如何解决这个问题?

Joh*_*ien 70

项目 - >属性 - >构建 - >高级 - >语言版 - > C#最新的次要版本

  • 在极少数情况下,您没有Visual Studio,只需将`<LangVersion> latest </ LangVersion>`添加到您的csproj文件中 (7认同)

Jul*_*eur 11

这是一个确认的错误,在15.3中引入.该修复程序将作为服务版本(15.3.2)的一部分提供.

该问题在https://github.com/dotnet/roslyn/issues/21518上进行了跟踪

  • 我们是否还需要选择"C#最新的次要版本"才能使用.Net Framework 4.7的目标框架?我有VS 2017 15.3.3但是我得到了编译错误,除非我在高级构建设置下切换到最新的次要版本. (2认同)

Jus*_* XL 8

看起来这是C#7.1的一个重大变化.(正如@JulienCouvreur所指出的,这实际上是一个错误,但下面的解决方法仍应该工作).


解决方法

尝试给一个名称(例如,使用相同的名称items,从IList<(string, bool)> items要一致)明确地items(即单实例).

var group = (Guid.NewGuid(), items: items);
Run Code Online (Sandbox Code Playgroud)