Ein Attribut-argument muss ein konstanter Ausdruck sein, ...- Erstellen Sie ein Attribut vom Typ array
Hier ist meine benutzerdefinierte Attribut und eine Klasse, ich verwende es auf:
[MethodAttribute(new []{new MethodAttributeMembers(), new MethodAttributeMembers()})]
public class JN_Country
{
}
public class MethodAttribute : Attribute
{
public MethodAttributeMembers[] MethodAttributeMembers { get; set; }
public MethodAttribute(MethodAttributeMembers[] methodAttributeMemberses)
{
MethodAttributeMembers = methodAttributeMemberses;
}
}
public class MethodAttributeMembers
{
public string MethodName { get; set; }
public string Method { get; set; }
public string MethodTitle { get; set; }
}
Den syntax-Fehler, angezeigt in der ersten Zeile oben:
Attribut-argument muss ein konstanter Ausdruck sein, typeof-Ausdruck oder ein array creation expression eines Attributs parameter Typ
Warum diese Fehler auftreten?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser ergänzt die Informationen, die Simon schon gab.
Fand ich einige Dokumentationen hier: Attribute Tutorial. (Es sagt Visual Studio .NET 2003 an der Spitze, aber es immer noch gilt.)
Den letzten Punkt erklärt Ihre syntax-Fehler. Man definiert ein eindimensionales array, aber es sollte nur von primitiven Typen, string, etc. wie aufgeführt in der vorherigen Aufzählungszeichen.
Attribut Argumente muss compile-Zeit-Konstante. Das bedeutet, dass der compiler muss in der Lage sein zu "bake-in" die Werte der Argumente, wenn die assembly kompiliert wird.
new ReferenceType()
ist nicht konstant - es muss bewertet werden, zur Laufzeit zu bestimmen, was es ist.Interessanterweisedas ist ein bisschen dürftig, dass es gibt einige Grenzfälle zu dieser Regel. Andere als diese werden Sie aber nicht tun können, was Sie zu tun versuchen.
Lassen Sie mich hinzufügen, daß der compiler gibt diesen Fehler ohne eine bestimmte Datei oder eine Zeile code, wenn das Attribut hat einen Konstruktor, der einen parameter, der nicht in einer einfachen Art und verwenden Sie den Konstruktor (d.h. Ihre nicht-einfach-parameter hat einen default-Wert).