C# 错误位置1没有行
我有个例外 System.ArgumentOutOfRangeException:位置1处没有行。 RBTree`1.GetNodeByIndex(Int32用户索引)** 位置上没有行可以是0、1或2。我想我正在尝试读取或写入一些超出数组边界的数组元素。代码片段如下所示C# 错误位置1没有行,c#,.net,visual-studio-2010,C#,.net,Visual Studio 2010,我有个例外 System.ArgumentOutOfRangeException:位置1处没有行。 RBTree`1.GetNodeByIndex(Int32用户索引)** 位置上没有行可以是0、1或2。我想我正在尝试读取或写入一些超出数组边界的数组元素。代码片段如下所示 public void ManageAlarm(string textName, int leaveValue) { try { int indices = team.Find(textName);
public void ManageAlarm(string textName, int leaveValue)
{
try
{
int indices = team.Find(textName);
if (indices >= 0)
{
DataRow row = teamTable.Rows[indices];
row[m_leaveValues] = leaveValue;
}
}
我应该在这里做些什么来防止此警报跟踪在访问m_tblAlert中的行之前,您需要检查m_tblAlert中的行数
m_tblAlert.Rows.Count必须大于indx
public void ManageDuplicateAlarm(string alertName, int dupValue)
{
try
{
int indx = m_alerts.Find(alertName);
if (indx >= 0 && m_tblAlert.Rows.Count > indx)
{
DataRow row = m_tblAlert.Rows[idx];
m_dcDuplicates.ReadOnly = false;
row[m_dcDuplicates] = dupValue;
m_dcDuplicates.ReadOnly = true;
}
}
编辑更多关于OP注释的解释
您正在
检查indx>=0,以确保-1不能是语句m_tblAlert.Rows[idx]的行索引<代码>同样,您需要检查m_alerts.Find(alertName)返回的值是否为有效的行号,即它不应大于数据表中的行数。在访问m_tblAlert中的行之前,您需要检查m_tblAlert中的行数m_tblAlert.Rows.Count必须大于indx
public void ManageDuplicateAlarm(string alertName, int dupValue)
{
try
{
int indx = m_alerts.Find(alertName);
if (indx >= 0 && m_tblAlert.Rows.Count > indx)
{
DataRow row = m_tblAlert.Rows[idx];
m_dcDuplicates.ReadOnly = false;
row[m_dcDuplicates] = dupValue;
m_dcDuplicates.ReadOnly = true;
}
}
编辑更多关于OP注释的解释
您正在检查indx>=0,以确保-1不能是语句m_tblAlert.Rows[idx]的行索引<代码>类似地,您需要检查m_alerts.Find(alertName)返回的值是否为有效的行号,即它不应大于数据表中的行数。您正在检查indx>=0,以确保-1不能作为语句m_tblAlert.rows[idx]的行索引;同样,您需要检查m_alerts返回的值。Find(alertName)必须是有效的行号,即它不应大于数据表中的行数。预期行为取决于代码中如何处理它。因此,根据您的回答,如果索引超出边界,它将跳过。这意味着我们会丢失任何数据吗?如果索引位于外部边界,则必须重新访问返回索引的方法。这是一种情况,一条街上有从1号到10号的房子,有人告诉你他住在那条街上的12号房子里。我不知道数据表的最大长度可能取决于你机器上安装的内存(RAM)。我认为您需要在表数据和m_alerts.Find()返回的结果之间进行同步(映射),而不是增加表的大小。您可能需要搜索表中的某些列值,而不是行的索引。您正在检查indx>=0,以确保-1不能是语句m_tblAlert.Rows[idx]的行索引;同样,您需要检查m_alerts返回的值。Find(alertName)必须是有效的行号,即它不应大于数据表中的行数。预期行为取决于代码中如何处理它。因此,根据您的回答,如果索引超出边界,它将跳过。这意味着我们会丢失任何数据吗?如果索引位于外部边界,则必须重新访问返回索引的方法。这是一种情况,一条街上有从1号到10号的房子,有人告诉你他住在那条街上的12号房子里。我不知道数据表的最大长度可能取决于你机器上安装的内存(RAM)。我认为您需要在表数据和m_alerts.Find()返回的结果之间进行同步(映射),而不是增加表的大小。您可能需要搜索表中的某些列值,而不是行的索引。