2016-09-08 1 views
4

Сегодня я заметил что-то странное, что я сначала подумал Wouldnt компиляции:Атрибут oneliner без запятой?

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

Обратите внимание запятая недостающую между сериализации и устаревшими. Это дает ошибку, но она все еще компилируется !. Почему это? Атрибуты даже работают так?

+0

Это приятно знать. Кажется, вы можете связать атрибуты внутри одной группы '' '' ', используя пробел в качестве разделителя, например. '[Serializable Obsolete MyA MyB]' (где 'MyA' и' MyB' являются настраиваемыми атрибутами). Обычно (что большинство людей используют) каждый атрибут заключен в собственный '[' ']'. – Sinatr

+1

Я пробовал ваш код и проверял прикладные атрибуты с помощью отражения. Оба они кажутся примененными к классу. _Что это ошибка, которую вы получаете, и _who_ поднимает ее? Это, очевидно, не ошибка компилятора (иначе компиляция не будет успешной). Я получаю ошибку «Атрибут недействителен при этом типе объявления», кажется, что ReSharper поднимает это, и думает, что я хочу применить первый атрибут ко второму. Во всяком случае, синтаксис no-comma кажется действительным в C#. –

ответ

0

Кажется, Рене уже сказал, что resharper дает эту ошибку. Я приостановил решайер, и теперь я вообще не ошибаюсь. Таким образом, это похоже на отличный синтаксис в C# для атрибутов.

Почему resharper дает эту ошибку, я не знаю, однако. Конечно, это может быть странный синтаксис и против условностей, но это то, что предупреждения для ошибок.