一个实现 IFormattable 接口的例子

来源:互联网 发布:b2b2c源码 编辑:程序博客网 时间:2024/03/29 07:55

摘自 《Professional C# 4 and .NET 4》

    class Program    {        static void Main()        {            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);            Console.WriteLine("\nNorms are:\nv1 is {0,20:N}\nv2 is {1,20:N}", v1, v2);            Console.ReadKey();        }    }    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 string ToString(string format, IFormatProvider formatProvider)        {            if (format == null)                return ToString();            string formatUpper = format.ToUpper();            switch (formatUpper)            {                case "N":                    return "|| " + Norm() + " ||";                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();            }        }        public double Norm()        {            return x * x + y * y + z * z;        }    }
原创粉丝点击