检查字符串是否为空

Ano*_*urn 0 c# methods null conditional-statements

伙计我有一个方法论证.我想在进一步指向程序的执行路径之前检查它的null或空字符串

我的方法是

public void DisplayCalcQuery(string argFromQueryBuilder)
{
    if ((argFromQueryBuilder.Trim() != null) || (argFromQueryBuilder.Trim() != ""))
    {
        //notify closure of query builder
        _QueryBuilderIsOpen = false;
        UserBuiltQueries.Add(argFromQueryBuilder);
        //displayng the user built query(queries) on the stack panel meant to display it. 
        var lastItem = UserBuiltQueries[UserBuiltQueries.Count - 1];
        //removing all $signs from the obtained string
        lastItem = lastItem.Replace(@"$", "");
        addBuiltCheck(lastItem); 
    }
    else
    {
        //notify closure of query builder
        _QueryBuilderIsOpen = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,即使字符串正在"" 执行程序正在执行IF(我不想发生).

Spi*_*ode 9

使用String.IsNullOrWhiteSpace ,如下所述

public void DisplayCalcQuery(string argFromQueryBuilder)
{
    if (!string.IsNullOrWhiteSpace(argFromQueryBuilder))
    {
        //notify closure of query builder
        _QueryBuilderIsOpen = false;
        UserBuiltQueries.Add(argFromQueryBuilder);
        //displayng the user built query(queries) on the stack panel meant to display it. 
        var lastItem = UserBuiltQueries[UserBuiltQueries.Count - 1];
        //removing all $signs from the obtained string
        lastItem = lastItem.Replace(@"$", "");
        addBuiltCheck(lastItem); 
    }
    else
    {
        //notify closure of query builder
        _QueryBuilderIsOpen = false;
    }
}
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 6

使用String.IsNullOrEmpty精确设计用于检查值是空引用还是引用0长度字符串 - 尽管它不是为检查全空字符串设计的.String.IsNullOrWhiteSpace将处理,但它只能从.NET 4向上.重要的是区分(在你的脑海中)一个字符串(一个长度为0的字符串)和一个全空格字符串 - 你的问题询问一个空字符串,但是你在检查空虚之前修改了代码中的字符串,这表明你实际上只是想知道它是否是全空白.

结果Trim永远是一个空引用,尽管它可能是一个空字符串的引用.那些是非常不同的东西.目前尚不清楚为什么你也有一个||子句,因为Trim()它永远不会返回空字符串空引用的引用.

另外,如果您真的对修剪后的值感兴趣,那么您应该在代码中始终如一地使用它 - 此时您可能需要分别检查nullity和检查空字符串:

if (arg == null)
{
    // Whatever
}
string trimmed = arg.Trim();
if (arg == "")
{
    // Whatever
}
Run Code Online (Sandbox Code Playgroud)

或者你可以采取额外的检查空白和仍然修剪:

if (string.IsNullOrWhiteSpace(arg))
{
    // Whatever - make sure you return in here,
    // to avoid calling Trim on a null reference
}
string trimmed = arg.Trim();
// Whatever
Run Code Online (Sandbox Code Playgroud)

如果您使用的是.NET 4,则后者更清晰 - 性能差异不太可能显着.

最后,如果它是有效的调用者在引用传递到一个空的(或全部空白)字符串,但不适用于他们在一个空引用传递,可以考虑分别处理这些情况:

if (arg == null)
{
    throw new ArgumentNullException("...");
}
string trimmed = arg.Trim();
if (arg == "")
{
    // Whatever
}
Run Code Online (Sandbox Code Playgroud)

  • @SudhakarTillapudi:谢谢,修好.这很奇怪,IMO - 我通常将空格视为一个单词,而不是像在MSDN中那样连字.呃,好吧 :) (2认同)