2014-09-02 90 views
1

我有一個應用程序,其中有很多Decimal.ToString(void)的調用。默認格式不是需要的。我可以將這些電話更改爲其他電話號碼Decimal.ToString overloads,但如果我不需要,它會更好。那麼,有沒有辦法爲Decimal.ToString(void)方法指定不同的格式,以便我不必修改對此方法的任何調用?指定Decimal.ToString()方法的默認格式

更新

如下的回答表明,這是可以做到我想要的,但我不應該這樣做,因爲它不是良好的編程習慣。有許多替代方法涉及重寫呼叫;我打算去的方法是存儲所需的格式字符串常量,並傳遞到呼叫:

class Example 
{ 
    const string s_DecimalFormat = "N2"; 

    private decimal myDecimal1 = 12.345; 
    private decimal myDecimal2 = 6.7; 

    public void Method() 
    { 
     System.Console.WriteLine(myDecimal1.ToString(s_DecimalFormat)); 
     System.Console.WriteLine(myDecimal2.ToString(s_DecimalFormat)); 
    } 
} 

回答

0

從理論上講,如果你改變System.Globalization.CultureInfo.CurrentCulture的東西,格式化小數你想要的方式,這將工作。它會打開一個巨大的蠕蟲你可不想用十英尺的杆子碰它。 不要這樣做。更改所有電話。也許寫一個方法吧。

+0

您願意解釋爲什麼更改'CultureInfo.Curre ntculture'不會是個好主意嗎? – 2014-09-03 07:23:32

+2

@DanStevens主要是因爲它改變了整個程序。如果您不通過另一個FormatProvider,許多方法在內部使用它。我猜OP沒有。另外,修改*只是十進制格式是其他程序員無法預料的。這與最小驚喜的原則相違背。將它改變成另一種文化是一回事,改變一種文化或者改變自己的文化是不好的。 – nvoigt 2014-09-03 08:09:52

0

這裏的擴展方法可能不錯。喜歡的東西:

public static string ToMyString(this decimal value) 
{ 
    return value.ToString("your formatting"); 
} 

我@nvoigt同意改變全球化的設置是一個壞主意

+0

不是我在找什麼;我希望避免重寫任何對'ToString(void)'的調用 - 這將涉及用'ToMyString()'替換這些調用。 – 2014-09-03 07:22:55

0

你可以編寫自己的擴展方法。作爲一個例子:

public class Test 
{ 

    private void DoStuff() 
    { 

     Decimal d = new Decimal(); 
     d = 0.5M; 

     Console.WriteLine("{0}", d); 
     Console.WriteLine("{0}", d.ToCustomString()); 

    } 

} 

public static class Extensions 
{ 
    public static string ToCustomString(this Decimal number) 
    { 
     return string.Format("Blah {0}", number.ToString()); 
    } 
} 

輸出:

0.5 
Blah 0.5 

當使用Decimal.ToCustomString代替的ToString,至少在這種情況下,小數前綴爲 「嗒嗒」

可以編寫您希望返回的格式的擴展方法,您需要使用擴展方法而不是.ToString()