覆盖.ToString()

Eli*_*Eli 4 c# overriding

我想覆盖.ToString()函数,这样每当我得到一个double时,它只输出小数点后的5位数.

如何在覆盖函数内部对.ToString正在处理的对象进行处理?换句话说,我在下面的代码中放了什么shell而不是XXX?

public override string ToString()
{
    if (XXX.GetType().Name == "Double")
        return (Math.Round(XXX, 5));
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*röm 20

为什么不使用内置格式?

var pi = 3.14159265m;
Console.WriteLine(pi.ToString("N5"));
-> "3.14159"
Run Code Online (Sandbox Code Playgroud)

作为参考,我喜欢John Sheehan 的.NET Format String Quick Reference.


Jon*_*eet 11

你不能覆盖不同类型的方法 - 基本上你不能停止double.ToString它做的事情.但是,您可以编写一个方法,该方法采用double并对其进行适当格式化.


Meh*_*ari 6

正如乔恩指出的那样,你无法覆盖Double.ToString.您可以为double类型创建扩展方法,以帮助您执行此操作:

public static class DoubleExtensions {
   public static string ToStringWith5Digits(this double x) { ... }
}
Run Code Online (Sandbox Code Playgroud)

并使用它像:

double d = 10;
string x = d.ToStringWith5Digits(); 
Run Code Online (Sandbox Code Playgroud)