使用三种技术实现各种数值类型与Char实例的相互转换
转型(强制类型转换)
使用Convert类型
使用IConvertible接口
在任何应用程序中,System.String都是用得最多的类型之一。一个String代表一个不可变(immutable,一经创建,字符串便不能以任何方式修改)的顺序字符集。String类型直接派生自Object,所以它是一个引用类型。因此,String对象(它的字符数组)总是存在于堆上,永远不会跑到线程栈。
//三个文本常量字符串连接成一个文本常量字符串
String s="Hi" + " " + "there.";
在上述代码中,由于所有字符串都是文本常量字符串,所以C#编译器会在
编译时连接它们,最终会将一个字符串放到模块的元数据中。对非文本常量字符串使用+操作符,连接则会在
运行时进行。
若要在运行时将几个字符串连接到一起,请避免使用+操作符,因为它会在堆上创建多个字符串对象,而堆是需要垃圾回收的,从而影响到性能。应尽量使用System.Text.StringBuilder类型。
逐字字符串字符@
//指定应用程序路径
String file="C;\\Windows\\System32\\Notepad.exe";
//使用逐字字符串来指定应用程序路径
String file=@"C:\Windows\System32\Notepad.exe";
字符串是不可变的
String对象最重要的一个事实是,它是不可变的(immutable)。也就是说,字符串一经创建便不能更改,不能变长、变短或修改其中的任何字符。
字符串留用虽然有用,但使用时必须谨慎。
字符串池仍是提升字符串性能的一种有效的方式。
高效率构造字符串
StringBuilder sb=new StringBuilder();
StringBuilder代表的是一个
可变的(mutable)字符串。也就是说,StringBuilder的大多数成员都能更改字符数组的内容,同时不会造成在托管堆上分配新对象。
StringBuilder只有以下两种情况才会分配一个新对象。
动态构造一个字符串,它的长度超过了你设置的“容量”。
调用StringBuilder的ToString方法。
为了构造一个字符串,将所有字符串转换成大写,再在其中插入一个子字符串,需要写下面这样的代码:
//构造一个StringBuilder来执行字符串操作
StringBuilder sb = new StringBuilder();
//使用StringBuilder来执行一些字符串操作
sb.AppendFormat("{0} {1}","Yxd","Sxd").Replace(" ","-");
//将StringBuilder转换成String,以便将所有字符转换成大写
String s=sb.ToString().ToUpper();
//清除StringBuilder(分配一个新的Char数组)
sb.Length=0;
//将全部字符大写的String加载到StringBuilder中,执行更多的操作
sb.Append(s).Insert(8,"Marc-");
//将StringBuilder转换回String
s=sb.ToString();