2013-12-09 48 views
0

伙计们我有一个方法的参数。 我要检查如果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; 
    } 
} 

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

+2

使用'String.IsNullOrEmpty(yourString)' – germi

回答

3

,如果你的目的是要检查Whitespace你需要使用String.IsNullOrWhiteSpace()方法

试试这个:

if(!String.IsNullOrWhiteSpace(argFromQueryBuilder)) 
{ 
    //do here 

} 

完整代码:

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; 
} 

}

+0

请注意'String.IsNullOrWhiteSpace'在.NET Framework 4中首次引入。 – sshow

6

使用String.IsNullOrEmpty而这恰恰是设计用于检查值是否为空引用或0长度字符串的引用 - 虽然它不是检查全空白字符串而设计的。 String.IsNullOrWhiteSpace将处理该问题,但它只能从.NET 4向上提供。区分空的字符串(长度为0的字符串)和全空白字符串 - 您的问题询问有关空字符串,但您正在修剪代码中的字符串在检查空虚之前,这表明你实际上只是想知道它是否全空白。

Trim的结果是从不是空引用,尽管它可能是对空字符串的引用。这些是非常不同的东西。目前尚不清楚为什么你有一个||条款或者,作为Trim()不可能参考返回一个空字符串空引用。

此外,如果您真的对修剪值感兴趣,那么您应该通过代码一致地使用它 - 此时可能需要将无效检查和空字符检查分开:

if (arg == null) 
{ 
    // Whatever 
} 
string trimmed = arg.Trim(); 
if (arg == "") 
{ 
    // Whatever 
} 

或者你可以采取检查空白,仍然微调的额外命中:

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

后者是清洁的,如果你使用的是.NET 4 - 这是不太可能的性能差异会显著。

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

if (arg == null) 
{ 
    throw new ArgumentNullException("..."); 
} 
string trimmed = arg.Trim(); 
if (arg == "") 
{ 
    // Whatever 
} 
+0

该死的。你击败了我:) –

+1

IsNullOrWhiteSpace'不是他想要得到的更多吗? –

+1

@UweKeim:啊,忘记了那个方法 - 会编辑。 –

9

使用字符串。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; 
    } 
} 
+0

当字符串不为空时,OP想执行操作 –

+0

更新了条件 – SpiderCode

2

我会建议:

String.IsNullOrWhiteSpace() 

,因为它检查字符串为空,空或只包含的空格。

String.IsNullOrEmpty将不检查空格。

相关问题