2014-09-02 47 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()