字符串比较
string s = ""; 1) if(s == ""){} 2) if(s == string.Empty){} 3) if (string.IsNullOrEmpty(s)) { } 4) if(s != null && s.Length ==0) {} 5) if((s+"").Length == 0){}
1,2最慢 3较快 4,5最快
1,2几乎没区别 4,5几乎没区别
不过这个只适用于比较null和空字符串,如果是连续的空白就是string.IsNullOrWhiteSpace最快了,不过这个方法2.0里面没有
所以2.0可以这样 (s+"").trim() == 0
这里的关键就是 s + "" 这个操作可以把null转换为""
注意第二个参数只能是""或string.Empty 这样的累加几乎是不消耗时间的,如果第二个参数是" "(一个空格)这个时间就远远不止了
字符串拼接
字符串累加,这个道理和Regex一样,不要盲目崇拜StringBuilder
在大量(或不确定的)string拼接的时候,StringBuilder确实可以起到提速的作用
而少数几个固定的string累加的时候就不需要StringBuilder 了,毕竟StringBuilder 的初始化也是需要时间的
以下代码,字符串不会在运行时进行拼接,而是会在编译时直接生成一个字符串。
private static void NewMethod3()
{
string re2="123"+"abc"+"456"; ///该代码等效于///string re2="123abc456";
}
private static void NewMethod4()
{
const string a="t";
string re="abc"+a; ///因为a是一个常量,所以该代码等效于string=re="abc"+"t"; 最终等效于string re="abct";
}
如果有别的类型,最好先用.toString()的方法转换。
感谢#5楼 2014-03-24 16:45 残蛹 博友提供的说明
ps: 这段我确实记得我是写过的来着,不知道怎么的,发出来的时候就不见了.....

此外还有一个string.Concat方法,该方法可以小幅度的优化程序的速度,幅度很小
他和string.Join的区别在于没有间隔符号(我之前常用string.Join("",a,b,c,d),不要告诉我只有我一个人这么干)
另一种经常遇到的字符串拼接
public string JoinIds(List<User> users)
{
StringBuilder sb = new StringBuilder();
foreach (var user in users)
{
sb.Append("'");
sb.Append(user.Id);
sb.Append("',");
}
sb.Length = sb.Length - 1;
return sb.ToString();
}
对于这种情况有2中优化的方案
对于3.5以上可以直接使用Linq辅助,这种方案代码少,但是性能相对差一些
public string JoinIds(List<User> users)
{
return "'" + string.Join("','", users.Select(it => it.Id)) + "'";
}
对于非3.5或对性能要求极高的场合
public string JoinIds(List<User> users)
{
var ee = users.GetEnumerator();
StringBuilder sb = new StringBuilder();
if (ee.MoveNext())
{
sb.Append("'");
sb.Append(ee.Current.Id);
sb.Append("'");
while (ee.MoveNext())
{
sb.Append(",'");
sb.Append(ee.Current.Id);
sb.Append("'");
}
}
return sb.ToString();
}
bool类型的判断返回
这种现象常见于新手程序员中
//写法1
if(state == 1)
{
return true;
}
else
{
return false;
}
//写法2
return state == 1 ? true : false;
//优化后
return state == 1;
浙公网安备 33010602011771号