string 最佳实践(C#版)
1. 总是初始化string
1.1 其是一个reftype
string str; //z null
string str = string.empty; //z string.empty 在整个app中只有一份实例
1.2 不要使用””
string str = “”; //z事实上每次使用都会产生一个新的object;低效。
//z 2012-2-20 13:44:46 PM IS2120@CSDN
2. 检查string
注意区分
未初始化字符串:null
空字符串:已初始化(不为null),长度为0
非空字符串:已初始化,长度不为零
3. 总是使用静态方法 IsNullOrEmpty 来测试字符串
string str1;
string str2 = string.Empty;
string str3 = “”;
string str4 = “Hello”;
string.IsNullOrEmpty(str1) // true
string.IsNullOrEmpty(str2) // true
string.IsNullOrEmpty(str3) // true
string.IsNullOrEmpty(str2) // false
3.1 if(str != “”) //z 这样会产生一个字符串object
3.2 IsNullOrEmpty 相当于if (str == null && str.Length == 0)
构建字符串
4. 总是使用StringBuilder类来从pieces构建string
4.1 使用stringbuilder
StringBuilder result = newStringBuilder();
result.Append("Hello");
result.Append(", ");
result.Append("world!");
Console.WriteLine(result.ToString());
这里只会产生一个stringbuilder对象,一个string对象
//z 2012-2-20 13:44:46 PM IS2120@CSDN
4.2 不要使用string连接操作(使用Concat 方法或是+ operator)构建字符串
string result = “Hello” + “,” + “world”;
Console.WriteLine(result);
这里会创建四个stringobject:1.Result ;2. “hello”; 3. “,”; 4.”world” 。
(代价很昂贵,尤其也能够在loop中时;总体积累起来代价可观)
5. Code style : 总是使用string而不是String
就如同你不会使用Int32,而总是写int一样。
//z 2012-2-20 13:44:46 PM IS2120@CSDN
6. 判断字符串是否相等
方法1: if(str1.Equals(str2))…
方法2:if(str1== str2) …
没有那种方法更好,只是需要注意边际效应
(比如str1str2为null,那么方法1为抛出异常,而方法2会返回true)
note:事实上在微软的指导规则与这里不同,那里推荐总是使用Equals方法并明确指定比较规则
6.1 务请注意
如果只是比较字符串是否相等,总是使用 Equals,Compare用于排序等