.NET string.IsNullOrWhiteSpace实现

时间:2012-04-20 17:55:33

标签: c# .net string c#-4.0

民间,  我正在查看 string.IsNullOrWhiteSpace 的实现:

http://typedescriptor.net/browse/types/9331-System.String

以下是实施:

public static bool IsNullOrWhiteSpace(string value)
{
    if (value == null)
    {
        return true;
    }
    for (int i = 0; i < value.Length; i++)
    {
        if (char.IsWhiteSpace(value[i]))
        {
        }
        else
        {
            goto Block_2;
        }
    }
    goto Block_3;
    Block_2:
    return false;
    Block_3:
    return true;
}

问题:这不是很复杂吗?以下实现不能做同样的工作并且更容易看到:

bool IsNullOrWhiteSpace(string value)
{
    if(value == null)
    {
        return true;
    }   
    for(int i = 0; i < value.Length;i++)
    {
        if(!char.IsWhiteSpace(value[i]))
        {
            return false;
        }
    }
    return true;
}

这种做法不正确吗?是否有性能损失?

4 个答案:

答案 0 :(得分:17)

原始代码(来自参考来源)是

public static bool IsNullOrWhiteSpace(String value) {
    if (value == null) return true; 

    for(int i = 0; i < value.Length; i++) { 
        if(!Char.IsWhiteSpace(value[i])) return false; 
    }

    return true;
}

你看到一个糟糕的反编译器的输出。

答案 1 :(得分:8)

您正在查看从反汇编的IL重新创建的C#。我确信实际的实现更接近您的示例,并且不使用标签。

答案 2 :(得分:2)

必须是typedescriptor的反汇编程序。

当我使用JetBrain的dotPeek查看相同的功能时,它看起来像这样:

 public static bool IsNullOrWhiteSpace(string value)
    {
      if (value == null)
        return true;
      for (int index = 0; index < value.Length; ++index)
      {
        if (!char.IsWhiteSpace(value[index]))
          return false;
      }
      return true;
    }

答案 3 :(得分:2)

下面显示的是旧版本所需的扩展方法。我不确定从哪里获得代码:

public static class StringExtensions
    {
        // This is only need for versions before 4.0
        public static bool IsNullOrWhiteSpace(this string value)
        {
            if (value == null) return true;
            return string.IsNullOrEmpty(value.Trim());
        }
    }