2010-10-03 63 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