采用以下简单代码。 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 { }
}
这是在针对.Net 4.6的VS 2015中制作的。
如果您在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系统中编译时会导致语法错误。
答案 0 :(得分:12)
感谢Hans Passant分享此信息。
看来这确实是a bug with the roslyn compiler。据报道,2016年10月,也就是同年6月VS 2015的最后一次发布之后。
此修补程序已进入Visual Studio 2017,这就是为什么此语法被正确报告为错误。