utiliser des valeurs décimales comme parameters d’atsortingbut dans c #?

J’ai essayé d’utiliser des valeurs décimales comme parameters pour un atsortingbut de champ mais j’ai une erreur de compilation.

J’ai trouvé ce lien sur le blog en disant qu’il n’était pas possible d’utiliser .Net, est-ce que quelqu’un sait pourquoi ils choisissent ceci ou comment utiliser les parameters décimaux?

Merci.

Ceci est une ressortingction CLR. Seules les constantes primitives ou les tableaux de primitives peuvent être utilisés comme parameters d’atsortingbut. La raison en est qu’un atsortingbut doit être entièrement encodé en métadonnées. Ceci est différent d’un corps de méthode qui est codé dans IL. L’utilisation de MetaData limite ssortingctement la scope des valeurs pouvant être utilisées. Dans la version actuelle du CLR, les valeurs de métadonnées sont limitées aux primitives, null, aux types et aux tableaux de primitives (peut-être en ont omis une mineure).

Les décimales dans un type de base ne sont pas un type primitif et ne peuvent donc pas être représentées dans les métadonnées, ce qui les empêche d’être un paramètre d’atsortingbut.

J’ai le même problème. Je considère utiliser des chaînes . Ce n’est pas sûr, mais c’est lisible et je pense que nous pourrons écrire des nombres valides dans les chaînes :-).

 class BlahAtsortingbute : Atsortingbute { private decimal value; BlahAtsortingbute(ssortingng number) { value = decimal.Parse(number, CultureInfo.InvariantCulture); } } [Blah("10.23")] class Foo {} 

Ce n’est pas une beauté, mais après avoir considéré toutes les options, c’est assez bon.

Lorsque j’ai rencontré cette situation, j’ai fini par exposer les propriétés de l’atsortingbut en tant que Double, mais à l’intérieur de l’atsortingbut, elles les traitaient comme Decimal. Loin d’être parfait, mais pour les cas simples, cela pourrait être ce dont vous avez besoin.

Pour les astuces en temps réel avec des atsortingbuts, j’utilise la classe TypeConverter .

Vous pouvez utiliser le constructeur suivant. Lorsque vous avez un littéral décimal en code C #, le compilateur C # émet un appel à ce constructeur.

Decimal(Int32, Int32, Int32, Boolean, Byte)

Edit: Je sais que ce n’est pas pratique.