检查使用Split()创建的数组是否为空C#

时间:2014-04-09 16:57:49

标签: c#

尝试了一些方法,所有这些方法都应该有用,但我想这是我对String.Split()方法对null /空字符串的反应缺乏了解。

我看了这个问题:what should be returned for string.Split(";") if string is null or empty并且它提供了丰富的信息,但并没有真正帮助我。

这就是我所拥有的,如果ps.HeaderText包含""null,它仍会跳转到if语句,我会收到错误消息{{1}不知道为什么它一直跳进循环。

Index was out of range.

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:7)

  

这就是我所拥有的,如果ps.HeaderText包含“”或者为null,它仍会跳转到if语句,并且我收到错误消息,指出Index超出范围。不确定为什么它一直跳进循环

如果字符串为空,您将获得一个空的条目。这意味着长度为1,但您尝试访问splitHeader[1](第二个条目)。

您可以使用RemoveEmptyEntries

解决此问题
string[] splitHeader = ps.headerText.Split(new[] {'*'}, StringSplitOptions.RemoveEmptyEntries);

if (splitHeader.Length > 1)
{
    //.. Your code

答案 1 :(得分:2)

您可以在分割stringand之前检查它,如果有P *字符,则为样本:

if (ps.isSet)
{
    if (!string.IsNullOrEmpty(ps.headerText) && ps.headerText.Contains("*"))
    {
       string[] splitHeader = ps.headerText.Split('*');

       if (splitHeader != null || splitHeader.Length != 0)
       {
           ps.headerText = splitHeader[0] + company[index] + splitHeader[1];
       }
    }
}

答案 2 :(得分:1)

if (splitHeader != null || splitHeader.Length != 0)

如果splitHeader不为空或者其长度不为0,则传递此条件。因此,如果它不为空且其长度为0,则传递。

||更改为&&。另外,像里德说的那样,检查> 1,因为你抓住了前两个元素。

答案 3 :(得分:0)

如果headerText为空,那么您的代码就可以正常工作(嗯,这不完全正确,splitHeader[1]仍会导致IndexOutOfRangeException)。更有可能headerText为空,这意味着您在开始检查结果之前会得到NullReferenceException

因此,在拆分之前添加另一张支票,

if (ps != null && ps.headerText != null)
     //spit continue along

基本上,我不认为问题出在你对splitHeader的检查上,尽管你应该做splitHeader.Length >= 2),因为你将访问第二个元素,检查长度是否为0不足以防止异常。您需要检查它的长度是否至少比您要访问的最大索引大1。

PS我显然没有仔细阅读您的问题,因为如果if为空,您将无法访问headerText。但是,这仍然是您的代码可能抛出的地方。