参见C#高级编程(第4版)第8章 字符串和正则表达式
class Program
{
static void Main(string[] args)
{
Vector v1 = new Vector(1, 32, 5);
Vector v2 = new Vector(845.4, 54.3, -7.8);
Console.WriteLine("/nIn IJK format, /nv1 is {0,30:IJK}/nv2 is {1,30:IJK}", v1, v2);
Console.WriteLine("/nIn default format, /nv1 is {0,30}/nv2 is {1,30}", v1, v2);
Console.WriteLine("/nIn VE format, /nv1 is {0,30:VE}/nv2 is {1,30:VE}", v1, v2);
}
}
class Vector : IFormattable
{
private double x, y, z;
public Vector(double x, double y, double z)
{
this.x = x;
this.y = y;
this.z = z;
}
public override string ToString()
{
return "(" + x + ", " + y + ", " + z + ")";
}
#region IFormattable Members
public string ToString(string format, IFormatProvider formatProvider)
{
if (format == null)
{
return ToString();
}
string formatUpper = format.ToUpper();
switch (formatUpper)
{
case "VE":
return string.Format("({0:E},{1:E},{2:E})", x, y, z);
case "IJK":
StringBuilder sb = new StringBuilder(x.ToString(), 30);
sb.Append(" i + ");
sb.Append(y.ToString());
sb.Append(" j + ");
sb.Append(z.ToString());
sb.Append(" k");
return sb.ToString();
default:
return ToString();
}
}
#endregion
}
输出结果如下
In IJK format,
v1 is 1 i + 32 j + 5 k
v2 is 845.4 i + 54.3 j + -7.8 k
In default format,
v1 is (1, 32, 5)
v2 is (845.4, 54.3, -7.8)
In VE format,
v1 is (1.000000E+000,3.200000E+001,5.000000E+000)
v2 is (8.454000E+002,5.430000E+001,-7.800000E+000)