Un argument d'attribut doit être une expression constante
y a-t-il une solution pour le problème suivant?
un argument d'attribut doit être une expression constante
je veux utiliser des décimales dans le paramètre d'un attribut.
1 réponses
malheureusement, vous ne pouvez pas utiliser de décimales dans les valeurs d'attribut, car le CLR lui-même ne connaît pas vraiment System.Decimal
type-ce n'est pas un type primitif comme int, double etc. Le compilateur C# le simule pour les champs de const de type décimal, mais il ne peut pas obtenir le même effet avec les attributs.
le C# 3 spec, l'article 17.1.3:
les types de position et nommé paramètres pour un attribut de classe sont limité au paramètre attribut type, qui sont les suivantes:
- L'un des suivants types: bool, byte, char, double, float, int, long, sbyte, court, chaîne, uint, ulong, ushort.
- l'objet type.
- le système de type.Type.
- Un enum type, à condition qu'il ait publique l'accessibilité et le type il est imbriqué (le cas échéant) ont également public l'accessibilité (§17.2).
- tableaux unidimensionnels de ce qui précède type.
Puis plus tard dans l'article 17.2:
Une expression E est un attribut de l'argument de l'expression si toutes les affirmations suivantes sont > true:
- le type de E est un attribut type de paramètre (§17.1.3).
- À le temps de compilation, la valeur de E peut être résolu à l'une des opérations suivantes:
- Un la valeur de la constante.
- Un Système.Type d'objet.
- un réseau unidimensionnel de l'attribut de l'argument-expressions.