.NET 字符串.IsNullOrWhiteSpace 实现
本文关键字:实现 IsNullOrWhiteSpace 字符串 NET | 更新日期: 2023-09-27 18:31:44
伙计们, 我正在查看字符串的实现。IsNull或WhiteSpace in :
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;
}
此实现不正确吗?它有性能损失吗?
原始代码(来自参考源)是
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;
}
您看到的是一个糟糕的反编译器的输出。
您正在查看从反汇编的 IL 重新创建的 C#。 我确信实际实现更接近您的示例并且不使用标签。
下面显示的是旧版本所需的扩展方法。 我不确定我从哪里获得代码:
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());
}
}
一定是类型描述符的反汇编器在这样做。
当我使用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;
}