请看以下简单的代码。方法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系统编译时出现语法错误。