string.Length> 0和string.Length!= 0

时间:2016-03-13 15:15:13

标签: c#

在性能方面,以下c#代码之间是否有任何区别:

string s = "abc";
bool notEmpty1 = s.Length != 0;
bool notEmpty2 = s.Length > 0

如果没有,哪个是更好的编码指南?我也有兴趣看看在这个例子中是否有其他语言的行为与c#不同。

5 个答案:

答案 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的字符串