【问题标题】:Errors when using the C# 7.0 Tuple in a method在方法中使用 C# 7.0 元组时出错
【发布时间】:2018-11-11 03:21:48
【问题描述】:

我正在使用下面的代码在 C# 7.0 中尝试新的元组语法,但它没有编译。 VS 2017 15.7 .Net 4.6 不会给出错误计数,但会在输出窗口中显示错误。 Resharper 没有指出任何错误。相同的代码在 Linqpad 中运行。我安装了Install-Package System.ValueTuple -Version 4.5.0
我错过了什么?

private (bool a, bool b) Get(int num)
{
    return (true, false);
}

错误是:

error CS1519: Invalid token '(' in class, struct, or interface member declaration
error CS1001: Identifier expected
error CS1002: ; expected
Syntax error, ',' expected
error CS1002: ; expected
error CS1520: Method must have a return type
error CS1026: ) expected
error CS1002: ; expected
error CS1513: } expected
error CS1002: ; expected
error CS1513: } expected

【问题讨论】:

  • 愚蠢的问题 - 您是否检查了所有项目的构建设置以确认您使用的是最新的 C#? Resharper 的更新语言工具对我来说根本不起作用,所以如果你使用它,它可能也会搞砸你的解决方案。
  • 当你说“在输出窗口中”——当你编译,或者当你运行?例如,如果此代码在 Razor 视图中,则这对于该问题可能非常重要。请提供更多上下文。 (如果您只是以正常方式编译,则不需要安装额外的 NuGet 包 - 如果在执行时完成任何编译,那是另一回事。)
  • 如果你能提供一个minimal reproducible example 来证明这个问题,那就更好了——你能在一个小控制台应用程序中重现它吗?
  • 产生的错误表明正在使用较旧的 C# 编译器(7.0 之前)。它根本不识别元组语法...
  • @JulienCouvreur:确实 - 这向我表明它是在执行时(或通过其他渠道)发生的编译。完全使用 VS2017 应该允许一般的元组代码,对吧? OP 尝试使用另一个 C# 7 功能来查看他们是否观察到相同的事情可能会很有趣。

标签: c# visual-studio-2017 tuples c#-7.0


【解决方案1】:

安装最新版本的 Microsoft.Net.Compilers 升级了我已经解决了问题的版本,但随后我继续删除了 csproj 和 packages.config 文件中对它的所有引用。我不记得我为什么需要它。

Install-Package Microsoft.Net.Compilers -Version 2.8.2

【讨论】:

  • 这将是一个有用的答案,在问题中有更多上下文,但目前我怀疑它可能会误导某些人。我强烈怀疑您的项目试图在执行时编译该代码,但我们无法判断,因为我们没有太多上下文。
  • 我所做的只是添加了一个新方法,但它没有编译,我在我的配置中发布了一个问题。你还在寻找什么上下文?我的问题有什么误导性?
  • 我在问您正在编写什么样的应用程序,以及代码在哪里。 Razor 页面或视图中出现的代码(除非您预编译视图,否则将在执行时编译)与立即编译的应用程序的“常规”代码中出现的代码之间存在巨大差异。对于我没有明确使用“误导”一词,我深表歉意——我无意暗示您故意误导人们;我的观点是,在不同背景下遇到类似问题的其他人可能会产生错误的想法。
  • 我不知道为什么 OP 被否决了?我经历了完全相同的事情(包括仅在“输出”选项卡上可见的“静默”错误)。查看代码示例,我猜 大多数 人会认为它是 .cs 文件的编译时编译,而不是 Razor 视图的运行时编译。
  • 按照建议删除软件包可能不是一个选项,具体取决于 Razor 编译配置。
【解决方案2】:

更新Visual Studio版本后,为了使用新的语法,你还需要做一件事:

转到您的 NUGET 包管理器并添加对 System.ValueTuple.dll 的引用。

【讨论】:

    猜你喜欢
    • 2017-11-22
    • 1970-01-01
    • 2017-04-11
    • 2018-06-16
    • 2018-05-30
    • 1970-01-01
    • 2010-09-17
    • 2018-03-16
    • 1970-01-01
    相关资源
    最近更新 更多