摘自 《Professional C# 4and .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;
}
}
分享到:
相关推荐
winform 实现IFormattable源码! 很值得下载看看!资源免费,大家分享!!
第一个参数告诉方法需要何种格式的输出,而第二个IFormatProvider的参数则允许类型的使用者自定义格式化方法,在本文实现的ToString()方法中,并没有使用到第二个参数。关于IFormatProvider接口请阅读文章...
NULL 博文链接:https://corrinejtt.iteye.com/blog/842606
ValueString允许您将对象序列化为区域性不变的字符串,并将其解析为实现Parse / TryParse模式的任何类型。 当需要从文化中立的(不变的)字符串中初始化类型化的实例时使用该实例,该实例通常是从简单的配置文件或...
比如查询中,可能会经常遇到按时间段查询,有时会默认取出一个月的数据。当我们提交数据时,会需要记录当前日期,等等。下面就看看一些常用的方法。 首先,DateTime是一个struct。很多时候,会把它当成一个类。但它...
这个包在 4.6 之前的 .NET 中提供了FormattableString和FormattableStringFactory类。 这应该允许在任何 .NET 版本IFormattable C#6 内插字符串 ( $"{x}" ) 转换为IFormattable 。 从 NuGet 获取: Install-...
代码如下:/* * 名称:RandomId * 功能:生成随机ID *...namespace blqw{ public sealed class RandomId : IFormattable { /// <summary> 1234567890qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBN