2016-09-08 36 views
4

今天,我发现了一些奇怪的是,我首先想到的难道不编译:不带逗号的属性oneliner?

[Serializable Obsolete] 
class Program 
{ 
    static void Main(string[] args) 
    { 
    } 
} 

注意逗号序列化和过时之间失踪。它给出了一个错误,但它仍然编译!为什么是这样?属性甚至可以像这样工作吗?

+0

很高兴知道。看起来你可以使用空格作为分隔符链接单个'['']'组中的属性,例如'[Serializable Obsolete MyA MyB]'(其中'MyA'和'MyB'是自定义属性)。通常(大多数人习惯于)每个属性都包含在自己的'''''''中。 – Sinatr

+1

我试过你的代码并通过反射检查了应用的属性。他们似乎都适用于课堂。 _你得到的错误是什么,_who_正在提高它?显然没有编译器错误(否则编译将不会成功)。我得到一个“属性对此声明类型无效”的错误,似乎是ReSharper提出这个问题,它认为我想将第一个属性应用于第二个属性。无论如何,无逗号语法在c#中似乎有效。 –

回答

0

看来Rene已经说过resharper正在给出这个错误。我暂停了resharper,现在我没有任何错误。所以这似乎是C#中属性的完美语法。

为什么resharper给出这个错误我不知道。当然,这可能是奇怪的语法和违反约定,但这是警告是没有错误。