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.

23
demandé sur Ry- 2010-05-04 12:58:37

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.
32
répondu Jon Skeet 2010-05-04 09:01:26