2010-05-04 23 views

risposta

31

Sfortunatamente non è possibile utilizzare i decimali nei valori degli attributi, in quanto il CLR di per sé non conosce il tipo System.Decimal - non è un tipo primitivo come int, double ecc. Il compilatore C# fondamentalmente lo falsifica per i campi const del tipo decimale, ma non può ottenere lo stesso effetto con gli attributi.

Dalla C# 3 spec, sezione 17.1.3:

I tipi di posizionali e denominati parametri per una classe di attributo sono limitate al parametro di attributo tipi, che sono:

  • Uno dei seguenti tipi : bool, byte, char, double, float, int, long, sbyte, short, string, uint, ulong, ushort.
  • L'oggetto tipo.
  • Il tipo System.Type.
  • Un tipo enum , purché abbia pubblico accessibilità ei tipi in cui è annidata (se presenti) hanno anche pubblici accessibilità (§17.2).
  • Matrici unidimensionali dei tipi precedenti.

Poi più tardi nella sezione 17.2:

Un'espressione E è un attributo argomento-espressione se tutte le seguenti affermazioni sono> true:

  • Il tipo di E è un attributo tipo di parametro (§17.1.3).
  • A compilazione, il valore di E può essere risolto a uno dei seguenti:
    • Un valore costante.
    • Un oggetto System.Type.
    • Un array unidimensionale di espressioni-argomento-attributo .
Problemi correlati