var orth = node2.Descendants("span").ToList().FindAll(x => x.GetAttributeValue("class", "").Contains("orth"));
var type_translation = node2.Descendants("span").ToList().FindAll(x => x.GetAttributeValue("class", "").Contains("cit cit-type-translation"));
if (type_translation != null)
{
for(int i=0;i<Math.Max(type_translation.Count(),orth.Count());i++)
{
if(orth.Count()!=0)
{
results.senselist += type_translation[i].InnerText.Trim() +
" " + orth[i].InnerText.Trim() +"\n";
}
else
{
results.senselist += type_translation[i].InnerText.Trim() + " ";
}
}
}
调试器在orth[i].InnerText.Trim()
播放时,应用程序崩溃。
EX:orth.count = 5 and type_translation.count = 7
正如我的代码:orth [6或7]将为null并在'System.ArgumentOutOfRangeException'
显示错误orth[i]
,type_translation仍然有数据,但我不知道如何在null时检查它?帮我解决一下:
(=posséder)拥有,⇒Elle有2个小孩。她有两个孩子,她有两个孩子⇒Elle一个美女。她有一个可爱的房子。她有一个可爱的房子。 ⇒Ila le yeux bleus。他有蓝色的眼睛,他有蓝色的眼睛。 ⇒Tuas de beaux cheveux。你有漂亮的头发。你有漂亮的头发。 ⇒Ila beaucoup d'amis。他有很多朋友。他有很多朋友。
我没有足够的意义发布照片。抱歉。 https://social.msdn.microsoft.com/Forums/getfile/647259
答案 0 :(得分:0)
你的循环条件是要求两个集合的最大数量 - i<Math.Max(type_translation.Count(),orth.Count())
- 所以如果一个比另一个短,那么你就会遇到问题。
您需要使用Math.Min
或在每次访问阵列之前执行检查。
答案 1 :(得分:0)
这是破碎的:
for(int i=0;i<Math.Max(type_translation.Count(),orth.Count());i++)
{
if(orth.Count()!=0)
{
results.senselist += type_translation[i].InnerText.Trim() + " " + orth[i].InnerText.Trim() +"\n";
// ...
}
}
在脑海中经历这一切。 type_translation.Count > orth.Count
和orth.Count != 0
会发生什么?同样,orth.Count > type_translation.Count
和orth.Count != 0
会发生什么?你有一个IndexOutOfRangeException
,因为你的逻辑是有缺陷的。
我无法真正告诉你在这里想要做什么,但这很麻烦。我的建议是弄清楚你的不变量是什么。这两个系列之间有什么关系?他们有不同的尺寸是否有意义?如果是这样,它是否允许大于另一个?同样,如果是这样,那么在索引之前,您需要确保i
小于其中任何一个的计数。
现在真是一团糟。我建议您尽早维护不变量,以便清除此逻辑。