在性能方面,以下c#代码之间是否有任何区别:
string s = "abc";
bool notEmpty1 = s.Length != 0;
bool notEmpty2 = s.Length > 0
如果没有,哪个是更好的编码指南?我也有兴趣看看在这个例子中是否有其他语言的行为与c#不同。
答案 0 :(得分:4)
改为使用string.IsNullOrEmpty(s)
或string.IsNullOrWhiteSpace(s)
。
答案 1 :(得分:4)
所以,我决定进行测试,结果有些不确定,但很明显,任何性能差异都很小。
以下是我为测试而编写的代码:
var times = 100000;
string s = "abc";
Stopwatch sw = new Stopwatch();
sw.Start();
for (var i = 0; i < times; i++)
{
bool notEmpty1 = s.Length != 0;
}
var diff = sw.Elapsed;
sw.Restart();
for (var i = 0; i < times; i++)
{
bool notEmpty2 = s.Length > 0;
}
var gt = sw.Elapsed;
sw.Restart();
for (var i = 0; i < times; i++)
{
bool notEmpty3 = !string.IsNullOrEmpty(s);
}
var noe = sw.Elapsed;
sw.Restart();
for (var i = 0; i < times; i++)
{
bool notEmpty4 = s.Any();
}
var any = sw.Elapsed;
sw.Restart();
for (var i = 0; i < times; i++)
{
bool notEmpty4 = s != string.Empty;
}
var dif2 = sw.Elapsed;
Console.WriteLine(string.Format("!= {0}\n> {1}\nIsNullOrEmpty {2}\nAny {3}\n!= empty {4}", diff.TotalMilliseconds, gt.TotalMilliseconds, noe.TotalMilliseconds, any.TotalMilliseconds, dif2.TotalMilliseconds));
以下是一些测试结果:
!= 0.4986
> 0.451
IsNullOrEmpty 0.3965
Any 6.8151
!= empty 0.5844
!= 0.7649
> 0.7822
IsNullOrEmpty 0.5672
Any 3.4259
!= empty 0.5104
!= 0.7984
> 0.5202
IsNullOrEmpty 0.3484
Any 3.3951
!= empty 0.4786
!= 0.9502
> 0.6104
IsNullOrEmpty 0.4877
Any 4.1838
!= empty 0.6849
您可以在this fiddle.
中自行运行答案 2 :(得分:0)
您可以使用以下方法之一:
string.IsNullOrEmpty(string)
或
string.IsNullOrWhiteSpace(string)
但你可以使用它:
s.Length > 0
答案 3 :(得分:0)
+1表示string.empty(cb.net等效)
另外,你为什么检查否定?
Bool isEmpty = string.IsNullOrEmpty(s);
答案 4 :(得分:-1)
更好的选择,更优雅的是
bool notEmpty2 = s.Length > 0
这是因为不可能有一个长度小于0的字符串