尝试了一些方法,所有这些方法都应该有用,但我想这是我对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.
非常感谢任何帮助!
答案 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)
您可以在分割string
,and
之前检查它,如果有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
。但是,这仍然是您的代码可能抛出的地方。