2016-09-08 3 views
4

Heute bemerkte etwas seltsam, dass ich zuerst dachte kompilieren würde nicht:Attribut oneliner ohne Komma? i

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

Beachten Sie das Komma zwischen serializable und veraltet fehlt. Es gibt einen Fehler, aber es kompiliert immer noch! Warum ist das? Funktionieren Attribute sogar so?

+0

Das ist schön zu wissen. Es scheint, dass Sie Attribute innerhalb einzelner '[' ']' Gruppe ketten können, die Raum als Trennzeichen, z. '[Serializable Obsolete MyA MyB]' (wobei 'MyA' und' MyB' benutzerdefinierte Attribute sind). Gewöhnlich (was die meisten Leute gewohnt sind) ist jedes Attribut in eigene '[' ']' eingeschlossen. – Sinatr

+1

Ich habe Ihren Code ausprobiert und die angewendeten Attribute per Reflektion geprüft. Beide scheinen auf die Klasse angewandt zu werden. _What_ ist der Fehler, den Sie bekommen und _who_ es erhöht? Es ist offensichtlich kein Compilerfehler (andernfalls wäre die Kompilierung nicht erfolgreich). Ich bekomme ein "Attribut ist nicht gültig für diesen Deklarationstyp" -Fehler, es scheint, dass es ReSharper ist, wer dies anhebt und es denkt, dass ich das erste Attribut auf das zweite anwenden wollte. Wie auch immer, die Nicht-Kommasyntax scheint in C# gültig zu sein. –

Antwort

0

Es scheint, als ob Rene bereits gesagt hat, dass Resharper diesen Fehler gibt. Ich habe Resharper suspendiert und jetzt bekomme ich überhaupt keinen Fehler. Dies scheint eine perfekte Syntax in C# für Attribute zu sein.

Warum Resharper diesen Fehler gibt, weiß ich aber nicht. Sicher könnte es komische Syntax und gegen Konventionen sein, aber das ist, was Warnungen für keine Fehler sind.

Verwandte Themen