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(我不想发生).
使用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)
使用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)
| 归档时间: |
|
| 查看次数: |
211 次 |
| 最近记录: |