2015-10-08 5 views
1

J'ai défini une coutume enumDescriptionAttribute (voir ma précédente question: Multiple enum descriptions)attribut personnalisé: Un argument d'attribut doit être une expression constante

public class DescriptionWithValueAttribute : DescriptionAttribute 
{ 
    public Decimal Value { get; private set; } 

    public DescriptionWithValueAttribute(String description, Decimal value) 
     : base(description) 
    { 
     Value = value; 
    } 
} 

Mon enum ressemble à ceci:

public enum DeviceType 
{ 
    [DescriptionWithValueAttribute("Set Top Box", 9.95m)] 
    Stb = 1, 
} 

I obtenez l'erreur suivante lors de la compilation:

An attribut argument doit être une expression constante, expression typeof ou tableau expression création d'un paramètre de type d'attribut

J'ai aussi essayé: [DescriptionWithValueAttribute("Set Top Box", (Decimal)9.95)]

Toutes les idées?

+1

Voir http://stackoverflow.com/questions/507528/use-decimal-values-as-attribute-params-in-c – BoltClock

Répondre

0

J'ai mis à jour mon habitude enumDescriptionAttribute à ce qui suit:

public class DescriptionWithValueAttribute : DescriptionAttribute 
{ 
    public Decimal Value { get; private set; } 

    public DescriptionWithValueAttribute(String description, Double value) 
     : base(description) 
    { 
     Value = Convert.ToDecimal(value); 
    } 
} 

Il attend un Double convertit ensuite Decimal, comme je l'ai besoin de la valeur finale en tant que Decimal. Fonctionne comme prévu Les nombres décimaux ne peuvent pas être utilisés comme paramètres d'attribut.

3

Selon this article:

paramètres d'attributs sont limités à des valeurs constantes des types suivants:

  • types simples (bool, byte, char, short, int, long, float et double)
  • chaîne
  • System.Type
  • énumérations objet (l'argument à un paramètre d'attribut d'objet de type doit être une valeur constante de l'un des abov types e).
  • de tableaux à une dimension de l'un des types ci-dessus

, vous ne pouvez pas utiliser décimal. Remplacez-le par un flotteur ou double. Autre façon - stocker la valeur sous forme de chaîne et l'analyser.