获取“推断元组元素名称。请使用语言版本 7.1 或更高版本通过推断名称访问元素。”
Posted
技术标签:
【中文标题】获取“推断元组元素名称。请使用语言版本 7.1 或更高版本通过推断名称访问元素。”【英文标题】:Getting "Tuple element name is inferred. Please use language version 7.1 or greater to access an element by its inferred name." 【发布时间】:2018-01-22 21:01:34 【问题描述】:在我们将 Visual Studio 2017 更新到最新的 15.3 之后,直到今天,我们的 UWP 应用程序中的以下代码一直运行良好。
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);
没有错误消息,但在输出窗口中
推断元组元素名称“items”。请使用语言版本 7.1 或更高版本通过推断名称访问元素。
知道为什么以及如何解决这个问题吗?
【问题讨论】:
@itsme86 好吧,我不能只升级它以使用 C#7.1,因为它是一个 UWP 应用程序。 这与您的问题无关,但像new List<(Guid key, IList<(string, bool)> items)>
这样的类型可以产生体面的用例 反对 元组。除了添加项目之外,没有任何操作是有效或明显的——考虑一下你是否不想要像Dictionary<Guid, HashSet<string>>
这样的东西。 (显然,正确的类型完全取决于您的用例,但元组的嵌套列表往往不是。)
@itsme86 你知道如何指定语言版本 7.1 吗?我假设这实际上只是与预览相关的错误消息,在非预览版 Visual Studio 2017 中尚不可用。
@Jessica 迁移到 C# 7.1 对于 UWP 应用程序应该没问题。 C# 7.1 编译器已在使用,语言版本标志仅控制可用功能。
@JaredPar 你能告诉我怎么做吗?
【参考方案1】:
项目->属性->构建->高级->语言版本->C#最新次要版本
【讨论】:
谢谢!这实际上在没有解决方法的情况下有效。我不知道我能做到这一点。 在极少数情况下您没有 Visual Studio,只需将<LangVersion>latest</LangVersion>
添加到您的 csproj 文件中
感谢 python_kaa,将其放在 <LangVersion>latest</LangVersion>
not 对我有用。我需要明确,所以...在<PropertyGroup>
中添加<LangVersion>7.2</LangVersion>
为我解决了。【参考方案2】:
这是一个已确认的错误,在 15.3 中引入。该修复程序将作为服务版本 (15.3.2) 的一部分提供。
问题在https://github.com/dotnet/roslyn/issues/21518进行跟踪
【讨论】:
我们是否还需要选择“C# 最新次要版本”才能使用 .Net Framework 4.7 的目标框架?我有 VS 2017 15.3.3 但我得到编译错误,除非我在高级构建设置下切换到最新的次要版本。 @Steve Young,编译器对目标框架一无所知。 C# 语言规则(在这种情况下是错误)由“语言版本”决定,而不是目标框架。此错误已在 15.3.2 中修复,因此如果您仍然可以在 15.3.3 上重现,请重新打开链接的问题或打开一个新问题。谢谢【参考方案3】:看起来这是 C# 7.1 中的 breaking change。(正如 @JulienCouvreur 所指出的,这实际上是一个错误,但下面的解决方法应该仍然有效不过)。
解决方法
尝试给items
(即列表实例)显式地赋予一个名称(例如,使用与IList<(string, bool)> items
相同的名称items
以保持一致)。
var group = (Guid.NewGuid(), items: items);
【讨论】:
不,这是一个错误。规范中描述的重大更改涉及一个扩展方法,该方法被新命名的字段隐藏。 嘿@JulienCouvreur 感谢您告诉我!我认为它们是相关的,但显然你比我更清楚这一点。 :)以上是关于获取“推断元组元素名称。请使用语言版本 7.1 或更高版本通过推断名称访问元素。”的主要内容,如果未能解决你的问题,请参考以下文章