我收到错误:app.exe中发生了'System.IndexOutOfRangeException'类型的未处理异常
其他信息:索引超出了数组的范围。
使用下面的代码,我非常感谢您的帮助。
public string getMissingFields(WebBrowser wb, DataRow dr)
{
string Available2 = "";
Available2 = wb.Document.GetElementById("ContentPlaceHolder1_reqTxt")
.Style.Split(';')
.Where(x => x.Contains("display"))
.ToArray()[0].Split(':')[1];
string FieldsMissing="";
if( Available2 .Contains( "inline" )) {
FieldsMissing = FieldsMissing + "First name missing!" + ", ";
}
return FieldsMissing;
}
答案 0 :(得分:1)
你觉得风格总是包含“显示”,显然它没有。通过调用FirstOrDefault()
将索引器调用替换为偏移量0,然后测试null:
Available2 = wb.Document.GetElementById("ContentPlaceHolder1_reqTxt").Style.Split(';').Where(x => x.Contains("display")).ToArray().FirstOrDefault();
if( null != Available2 )
{
// continue
}
答案 1 :(得分:1)
两种可能性:
ToArray()
返回空数组。你正在尝试一个不存在的元素。Split(':')
返回零或一个元素。 Debug
您的代码并找到哪一个是真的。
您似乎不需要ToArray
。只需使用FirstOrDefault
,并检查返回结果是否为null。如果不是 null ,请调用{{1并再次检查以防止异常。
Split
答案 2 :(得分:1)
Available2 = wb.Document.GetElementById("ContentPlaceHolder1_reqTxt")
.Style.Split(';')
.Where(x => x.Contains("display"))
.ToArray()[0].Split(':')[1];
两个可能的问题:
ToArray()
确实返回一个空数组,at点访问元素0
会导致此错误。或者它正处于您在索引1处访问元素的位置 - 可能没有这样的元素,因为在您尝试拆分的字符串中没有:
?调试代码或确保ToArray()
返回至少一个元素,Split
返回两个元素。
你现在可以试试。这会拆分您的代码,以便您可以轻松调试:
var items = wb.Document.GetElementById("ContentPlaceHolder1_reqTxt")
.Style.Split(';')
.Where(x => x.Contains("display"))
.ToArray();
if (items.Count > 0)
{
string[] split = items[0].Split(':');
if (split.Length > 1)
Available2 = split[1];
}
答案 3 :(得分:0)
首先,考虑一下id=ContentPlaceHolder1_reqTxt
无法控制:
var reqTxt = wb.Document.GetElementById("ContentPlaceHolder1_reqTxt");
您必须处理null
:
if(reqTxt != null)
{
}
现在考虑没有样式display
,然后ToArray
返回一个空数组。您可以使用FirstOrDefault
并检查null
收益:
string Available2 = null;
if(reqTxt != null)
{
var firstDisplayStyle = reqTxt.Split(';')
.FirstOrDefault(s => s.Contains("display"));
if(firstDisplayStyle != null)
{
string[] displaySplit = firstDisplayStyle.Split(':');
// now handle the case that there is no colon:
if(displaySplit.Length > 1)
Available2 = displaySplit[1];
}
}
答案 4 :(得分:0)
Available2 = wb.Document.GetElementById(“ContentPlaceHolder1_reqTxt”)。Style.Split(';')。Where(x => x.Contains(“display”))。ToArray()[0] .Split( ':')[1];
要找到问题,请分解为:
if (wb == null || wb.Document == null )
return;
var element = wb.Document.GetElementById("ContentPlaceHolder1_reqTxt");
if (element == null || element.Style == null)
return;
var displayItems = element.style.Split(';').Where(x=> x.Contains("display")).FirstOrDefault();
if ( displayItems == null)
return;
var colonItems = displayItems.Split(':');
if ( colonItems.Count() < 2 )
return;
var Available2 = colonItems.Skip(1).First();