2010-10-03 61 views
2

的方式让我们说我有小数的列表:2种显示小数

List<decimal> values; 

和2函数来显示一个十进制:

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

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

什么是执行这样的最佳机制我根据值可以知道要调用哪个函数?

我希望有例如在C#中的typedefs。这样,我可以声明一个类型Percent和一个Decimal类型,它们都可以表示十进制值,但是我可以知道如何根据它的类型显示值。

C#中的任何等价物?

感谢

+1

只是为了您的信息:根据区域设置分隔符可以是逗号,而不是一个点。 – some 2010-10-03 23:53:28

回答

2

在一个类中包装百分比。你的一部分工作。只要确保按照您的要求定义implicit operator来捕获小数,以及一些其他操作和ToString。

+0

感谢隐式操作符提示,我发现如何去做。随意评论它是否可以改进 – ibiza 2010-10-04 00:52:56

2

这听起来像你想两个类:小数和百分比。每个人都会有一个适当打印的ToString。如果它们都具有相同的接口,则可以在使用该通用接口的List中拥有这两者的集合。

+0

那么,我创建了一个继承十进制的类..? – ibiza 2010-10-03 23:57:06

+0

不完全。你的列表应该是'value'类型,其中value是通用接口。然后创建两个从'value':decimal和percent继承的类。 – JoshD 2010-10-04 00:00:41

+0

如何更精确地定义该接口? – ibiza 2010-10-04 00:02:41

3

这里是我的课:

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

只需重写ToString()就可以了。我忘记了小数不应该包含在结构中,我会编辑我的答案。 – Jonn 2010-10-04 01:16:04