我有一个包含空值的字符串TempDayValues[j]
,但以下两个示例无法识别null
string Temp = TempDayValues[j].Trim();
if (string.IsNullOrEmpty(Temp))
{
Console.WriteLine("Found Null");
TempDayValues[j] = TempDayValues[j - 1];
}
If(Temp == null)
{
//code here
}
有没有更好的方法来识别null
值?
答案 0 :(得分:3)
与null
比较是检查它的方法。但是,在您的代码中,如果您在调用NullReferenceException
时尚未获得Trim
,那么您的字符串不为空。
您可能正在寻找IsNullOrWhiteSpace
:
if (string.IsNullOrWhiteSpace(TempDayValues[j]))
{
Console.WriteLine("Found Null");
TempDayValues[j] = TempDayValues[j - 1];
}
如果您首先要检查它是否为null并且有一个行为,如果它是空/空格,则会有不同的行为:
if(TempDayValues[j] == null)
{
// code
}
else if(TempDayValues[j].Trim() == string.Empty)
{
// code
}
答案 1 :(得分:0)
您的问题虽然有效,却缺少对您尝试完成的内容的解释。因为您只询问过空检查;我的回答只关注在您的代码片段中执行的空检查。
有一些关于您的代码的评论我认为可以帮助您更好地了解您的情况。
String Temp = TempDayValues[j].Trim();
有趣的是,您已经在字符串上调用了.Trim()
。如果TempDayValues[j]
为null,则会抛出异常。您无法在空值上调用方法(您也无法访问空值的属性和字段)。
如果您的申请没有抛出异常;我认为这不是你没有提到的;那么你已经隐含地已经证实了#34;你的字符串不是null。因为否则你会得到一个例外。
另请注意,.Trim()
永远不会使某些内容为空。因为您只想检查TempDayValues[j]
是否为空(并且可能覆盖该值,但从不使用值);在使用.Trim()
进行空检查时,功能上无关紧要。
让我们假设其余的解释是你的字符串可能为空;即使.Trim()
使你的例子无法实现。
if (string.IsNullOrEmpty(Temp))
{
Console.WriteLine("Found Null");
TempDayValues[j] = TempDayValues[j - 1];
}
如果你的字符串为空,,如果它是空的,你的if块将被执行。毕竟,你是调用方法string.IsNull OrEmpty ()。空字符串是一个非空的字符串,但也不包含任何字符。
因此,更正确的消息是"找到null或空字符串"。
if(Temp == null)
{
//code here
}
虽然这是检查null的有效方法;如果你的字符串为空,if块将不会执行。这可能就是你要找的东西。在大多数情况下,我希望String.IsNullOrEmpty()
更适合;但我不知道你的代码的具体目的。
在这里,说你"发现null"是正确的。而不是一个空字符串。
有人说;这个问题的答案是什么?
这不容易回答;因为你没有解释代码片段的用意。我将提供代码改进,它是我能给你的最好的信息。
string Temp = TempDayValues[j];
if (string.IsNullOrEmpty(Temp)) //use Temp == null here if you don't want it to trigger on empty strings.
{
Console.WriteLine("Found Null or empty string");
TempDayValues[j] = TempDayValues[j - 1];
}
编辑如果你的字符串不为空,不是空的情况下你还需要这个if if块,但它只包含空格;然后调用.Trim()
是相关的。在这种情况下,将if块更改为:
if (string.IsNullOrEmpty(Temp) || string.IsNullOrEmpty(Temp.Trim()))
如果Temp为null,则只执行左操作数(因为无论右操作数如何,它都会使评估结果true
。)
只有当您的字符串不是空或空时,才会执行右操作数。在这种情况下,它允许您检查仅包含空格字符的字符串。