C# C中检查空字符串的最可取方法#

C# C中检查空字符串的最可取方法#,c#,string,comparison,C#,String,Comparison,在考虑代码性能时,在C#中检查空字符串(我不是)的最佳方法是什么?(参见下面的代码) 或 或 任何帮助都将不胜感激。:) 它将同时检查NULL | | EMPTY 这就是实现: public static bool IsNullOrEmpty(string value) { if (value != null) { return (value.Length == 0); } return true; } 我认为最好的方法是if(string.Is

在考虑代码性能时,在C#中检查空字符串(我不是)的最佳方法是什么?(参见下面的代码)

任何帮助都将不胜感激。:)

它将同时检查NULL | | EMPTY

这就是实现:

public static bool IsNullOrEmpty(string value)
{
    if (value != null)
    {
        return (value.Length == 0);
    }
    return true;
}

我认为最好的方法是
if(string.IsNullOrEmpty(a))
,因为它比其他方法更快、更安全。

您也可以使用它

string input = "";

if (input != null)
{
    if (input.Length == 0)
    {

    }
}  

创建完整检查的扩展方法:

public static bool IsEmpty(this string s)
{
  if(s == null) return true;
  return string.IsNullOrEmpty(s.Trim()); // originally only (s)
}

抱歉,代码不好,已修复。现在,这将告诉您字符串是否为空或修剪后是否为空。

string.empty值将仅在运行时解密,但另一方面,在编译时知道“”值

这是两者之间唯一的区别

但说到最佳实践,如果出于某种原因,明天M$决定将空字符串值用作“”而不是“”,那么您的代码必须到处更改。因此,在这种情况下,最好使用String.Empty


这与Path.Combine使用的做法相同。

不要将字符串与
String.Empty
进行比较以检查空字符串

相反,使用
String.Length==0进行比较

string.Empty
之间的差异非常小<代码>字符串。空的
将不会创建任何对象,而
将在内存中创建一个新对象以进行检查。因此,string.empty在内存管理方面更好。 但是与
string.Length==0
的比较会更快,也是检查空字符串的更好方法

迟到:

if a == ""


将导致代码分析警告CA1820,所以您绝对不应该这样做。要进行完整的分析,请参见

否,它比检查字符串的长度慢,因为它必须测试两件事,而不是一件事。但是如果字符串的值为空,则长度检查将失败。我认为这是真的,但OP询问检查空字符串的最快方法。额外检查null并不是最快的方法(他可能知道字符串总是非null的)。@EricJ。我认为这也比我要问的要慢一些:)“如果字符串有空值,那么长度检查就会失败,我想”——它会抛出一个异常。(上面的其他注释是错误的,因为OP的示例使用了未初始化的变量,该变量将为null)。相信我,无论您认为您的问题有多独特,都只需先搜索。请使用
String。不建议使用Empty
而不是“”,因为它分配了新的stringHi,我知道并感谢你试图消除这里多余的问题。。但我真的很好奇这个:)thanks@KarelFrajtak:呃,不,它没有分配新字符串。事实核查:正如David所暗示的,字符串之间有区别。Empty和“”非常小,但有区别。“”实际上创建了一个对象,它可能会被从字符串实习生池中拉出,但仍然…而string.Empty不会创建任何对象…因此,如果您真的希望最终提高内存效率,我建议使用string.Empty。然而,你应该记住,区别是如此的琐碎,你永远不会在你的鳕鱼身上看到它。除了检查空字符串(2次检查)外,还检查空字符串,因此不会比只检查字符串长度更快(OP没有询问测试空字符串或空字符串)。@EricJ。是的,他有。因为他正在检查一个未设置的字符串,所以他需要它。。。他明确提到“不初始化”,实际代码略有不同:
return(value==null | | value.Length==0)。空的定义是什么<代码>“
我想是吧?@Karel:那么你会得到一个空引用异常。OP询问了检查空字符串的最快方法。是的,@KarelFrajtak,他可以像上面那样检查。现在你做的基本相同的事情是string.IsNullOrEmpty()。我已经给了KarelFrajtak一个答案,但实际上我关注的是字符串。你为什么要两次检查字符串是否为null?@Eric J。他可能想真正确定。@Otiel,不是-这是
IsNullOrEmpty
方法的反编译体:
返回值==null | | value.Length==0从.NET v4.0开始,您可以使用string.IsNullOrWhiteSpace,这将更快地完成相同的任务。如果愿意,还可以添加一个扩展方法:
publicstaticboolsempty(这个字符串s){returnstring.IsNullOrWhiteSpace(s);}
@andrewpalmer。我不同意string.IsNullOrEmpty比s.IsNullOrEmpty更清晰,特别是如果扩展方法名称表明它可以处理null。如果Microsoft更改string.Empty的定义,全球将有数百万程序崩溃。如果明天M$决定将空字符串值用作“”而不是“”。那一天,微软将变得非常愚蠢。如果他们决定重命名
String.Empty
?您的权利,但如果有其他选择,让我们更安全一点:)@Otiel Lol在这种情况下,任何事情都可以更改,如果他们将Main(String[]args)规则更改为Start(String[]args)该怎么办??我相信这永远不会发生,到目前为止,他们的最佳实践文档表示,他们从未打算更改任何API的名称或行为。但是它的扩展总是在改变。我不确定我是否明白你的意思。我不同意你说最好使用String.Empty<代码>“”
字符串。空的
将始终保持这种状态。OP应该使用他认为更可读的方法,仅此而已。我不会建议这种方法。如果字符串包含空格,那么字符串的长度将大于0,测试将失败。@Mana包含空格的字符串不是空的。字符串被插入,因此string.Empty和“”现在相等。@Dan,编译器将同时替换
public static bool IsNullOrEmpty(string value)
{
    if (value != null)
    {
        return (value.Length == 0);
    }
    return true;
}
string input = "";

if (input != null)
{
    if (input.Length == 0)
    {

    }
}  
public static bool IsEmpty(this string s)
{
  if(s == null) return true;
  return string.IsNullOrEmpty(s.Trim()); // originally only (s)
}
if a == ""