繁体   English   中英

为什么VS 2015允许以空格分隔的属性,而VS 2017则不允许?

[英]Why does VS 2015 allow attributes separated by spaces while VS 2017 does not?

请使用以下简单代码。 DoMyCode方法应用了两个属性,条目之间有空格。

using System;

namespace AttributeSpaceTesting
{
    class Program
    {
        static void Main(string[] args) { }

        [Horse Cow]
        static void DoMyCode() { }
    }

    [AttributeUsage(AttributeTargets.Method)]
    class HorseAttribute : Attribute { }

    [AttributeUsage(AttributeTargets.Method)]
    class CowAttribute : Attribute { }
}

这是在VS 2015中针对.Net 4.6制作的。

如果您在Visual Studio 2015(更新3)中运行此代码,它将编译并运行,没有错误或警告。

但是,在Visual Studio 2017中运行完全相同的代码将产生以下异常:

Syntax error, ',' expected

我理解为什么会发生这种错误。 我希望你在属性项之间需要逗号。 在C#5规范的第17.2节中:

属性部分由一对方括号组成,它们围绕一个或多个属性的逗号分隔列表。

那么为什么这种语法在VS 2015中合法呢?


对于完整的上下文,我正在尝试在我的团队的单元测试项目中使用VS 2017。 我注意到这样的线条:

[Description(@"The Test Description")]
[TestCategory("Regression"), TestCategory("Module"), TestCategory("ModuleRegression") TestMethod]
public void TC_12345_VerifyTheThingWorks()

在新的Visual Studio系统中编译时会导致语法错误。

感谢Hans Passant分享了这些信息。

看来这确实是roslyn编译器的一个错误 据报道,2016年10月,也就是同年6月VS 2015的最后一次发布。

此修复程序已进入Visual Studio 2017,这就是为什么此语法被正确报告为错误的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM