当字符串需要多次修改操作,而且数据比较多的时候可以用StringBuilder,string做修改操作的时候,都实际上新建了一个字符串。StringBuilder还可以指定容量,也可以不指定。
using System;
using System.Text;
namespace Wrox
{
public class MainEntryPoint
{
static int Main(string[] args)
{
Vector v1 = new Vector(1, 32, 5);
Vector v2 = new Vector(845.4, 54.3, -7.8);
Console.WriteLine("\nIn JIK format,\n v1 is {0,30:JIK}\n v2 is {1,30:JIK}", v1, v2);
Console.WriteLine("\nIn default format,\n v1 is {0,30}\n v2 is {1,30}", v1, v2);
Console.WriteLine("\nIn VE format,\n v1 is {0,30:VE}\n v2 is {1,30:VE}", v1, v2);
Console.WriteLine("\nIn Norm format,\n v1 is {0,30:N}\n v2 is {1,30:N}", v1, v2);
return 0;
}
}
struct Vector : IFormattable
{
public 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 String.Format("({0},{1},{2})", x, y, z);
}
public string ToString(string format, IFormatProvider formatProvider)
{
if(format == null)
return ToString();
string formatUpper = format.ToUpper();
switch(formatUpper)
{
case "N":
return "||"+Norm().ToString()+"||";
case "VE":
return String.Format("({0:E},{1:E},{2:E})", x, y, z);
case "IJK":
StringBuilder sb = new StringBuilder(x.ToString(),30);
sb.AppendFormat(" i + ");
sb.AppendFormat(y.ToString());
sb.AppendFormat(" j + ");
sb.AppendFormat(z.ToString());
sb.AppendFormat(" k");
return sb.ToString();
default :
return ToString();
}
}
public double Norm()
{
return x * x + y * y +z * z;
}
}
}