2010-10-03 3 views
2

disons que j'ai une liste de décimales:deux façons d'afficher une décimale

List<decimal> values; 

et 2 fonction pour afficher une décimale:

string DisplayPct(decimal pct) 
{ 
    return pct.ToString("0.00 %"); 
} 

string DisplayValue(decimal val) 
{ 
    return val.ToString("0.00"); 
} 

Quel serait le meilleur mécanisme pour mettre en œuvre si je pourrait savoir quelle fonction appeler en fonction de la valeur?

J'aurais aimé avoir par exemple typedefs en C#. De cette façon, j'aurais pu déclarer un type Percent et un type Decimal qui représenteraient les deux valeurs décimales, mais ensuite je pourrais savoir comment afficher la valeur en fonction de son type.

Tout équivalent en C#?

Merci

+1

Pour votre information: Selon les paramètres régionaux du delimiter pourrait être une virgule au lieu d'un point. – some

Répondre

2

Envelopper le pourcentage dans une classe. Un peu de travail de votre part. Assurez-vous simplement de définir le implicit operator pour capturer les décimales, ainsi que certaines autres opérations et ToString selon vos besoins.

+0

Merci pour l'indice d'opérateur implicite, j'ai trouvé comment le faire. N'hésitez pas à commenter si elle peut être améliorée – ibiza

2

On dirait que vous voulez deux classes: une décimale et un pour cent. Chacun aura un ToString qui imprime correctement. Si les deux ont la même interface, vous pouvez avoir une collection des deux dans une liste en utilisant cette interface commune.

+0

alors, je crée une classe héritant de decimal ..? – ibiza

+0

Pas tout à fait. Votre liste devrait être de type 'value' où value est l'interface commune. Créez ensuite deux classes héritant chacune de 'value': decimal et percent. – JoshD

+0

comment cette interface serait définie plus précisément s'il vous plaît? – ibiza

3

Voici mes classes:

public class Percent 
    { 
     public decimal value; 
     public Percent(decimal d) { value = d; } 
     public static implicit operator Percent(decimal d) { return new Percent(d); } 
     public static implicit operator decimal(Percent p) { return p.value; } 
    } 
    public class DecimalPrecise 
    { 
     public decimal value; 
     public DecimalPrecise(decimal d) { value = d; } 
     public static implicit operator DecimalPrecise(decimal d) { return new DecimalPrecise(d); } 
     public static implicit operator decimal(DecimalPrecise d) { return d.value; } 
    } 
+0

Il suffit de remplacer les ToString() et vous êtes prêt à partir. J'ai oublié que les décimales ne devraient pas être enveloppées dans des structures, je vais éditer ma réponse. – Jonn

Questions connexes