c# - 如何解决未处理的异常:ArumentOutOfRangeException
问题描述
我试图捕获一个未处理的异常,但它仍然发生错误。我需要从哪里开始“尝试”,何时/如何抓住它?这是我的代码:
String allMarks = "";
String toString1 = "";
String toString2 = "";
if (eventcounter.Count > 2)
{
allMarks = allMarks + eventcounter[0];
for (int i = 0; i < eventcounter.Count; i++)
{
toString1 = eventcounter[i].ToString();
for (int j = 1; j <= eventcounter.Count; j++)
{
try
{
toString2 = eventcounter[j].ToString();
}
catch (System.IndexOutOfRangeException)
{
Console.WriteLine("not enough elements to compare");
throw new System.ArgumentOutOfRangeException("Index parameter is out of range");
}
if (toString1 != toString2)//(eventcounter[i] != eventcounter[j])
{
allMarks = allMarks + eventcounter[j];
Console.WriteLine(allMarks);
//_sensorTextView3.Text = string.Format("Eventcounter: {0}", allMarks);
}
}
}
// _sensorTextView3.Text += allMarks;
}
更新:好的,我现在只使用一个循环而不是两个,但是每当运行代码时仍然会发生错误
for (int i = 0; i < eventcounter.Count; i++)
{
try
{
toString1 = eventcounter[i].ToString();
toString2 = eventcounter[i + 1].ToString();
}
catch (System.IndexOutOfRangeException)
{
throw new System.ArgumentOutOfRangeException("Index parameter is out of range");
}
if (toString1 != toString2)
{
allMarks = allMarks + eventcounter[i+1];
Console.WriteLine(allMarks);
}
解决方案
eventcounter
包含eventcounter.Count
元素,编号从0
到eventcounter.Count-1
。
和
for (int j = 1; j <= eventcounter.Count; j++)
在某些时候j
将变得等于eventcounter.Count
。由于元素编号范围是 [ 0
, eventcounter.Count
],因此访问元素编号的尝试会eventcounter.Count
抛出IndexOutOfRangeException
。
推荐阅读
- javascript - $.each 完成迭代后如何执行某些操作?
- path - Windows 上的 Cloud Foundry CLI 路径
- google-bigquery - 同一列的连接条件
- y86 - 为什么这个 Y86-64 代码段无法执行预期的 jg 分支?
- php - 在数据库中使用 uniqid 保存和更新
- android - Android - 如何检查您的联系人是否已在您的应用中注册?
- node.js - 我遇到了节点模块编译问题
- reactjs - 在反应中更改数据后未捕获的TypeError
- c# - 在特定字符处拆分字符串 (C#)
- django - 如何保存 pytest-django 夹具生成的测试数据