我有一个包含1列的DataTable和一个分别包含2列的DataTables列表。
我想逐行比较DataTable的值和List中每个DataTable的值的前6位。
这是我的代码:
for(int fs = 0; fs < dataTable.Rows.Count; fs++)
{
for(int fs2 = 0; fs < dataTableList.Count; fs2++)
{
for(int fs3 = 0; fs3 < dataTableList[fs2].Rows.Count; fs3++)
{
if(dataTable.Rows[fs]["columnName"].ToString().Equals(dataTableList[fs2].Rows[fs3]["otherColumnName"].ToString().Substring(0,6)))
{
//do sth.
}
}
}
}
程序到达if(dataTable.Rows[fs]["columnName"].ToString().Equals(dataTableList[fs2].Rows[fs3]["otherColumnName"].ToString().Substring(0,6)))
时停止运行,并出现System.ArgumentOutOfRangeException
错误。
有人知道我在做什么错吗?当我MessageBox
子字符串工作时。
答案 0 :(得分:1)
因此,首先,我建议将这种怪异重构为foreach
循环。
foreach(var row in dataTable.Rows)
{
foreach(var otherDataTable in dataTableList)
{
foreach(var otherRow in otherDataTable.Rows)
{
/* ... */
}
}
}
然后检查您要获取的string
的子字符串的长度是否实际上为6或更长。
const int compareLength = 6;
const string columnName = "columnName";
const string otherColumnName = "otherColumnName";
foreach(var row in dataTable.Rows)
{
foreach(var otherDataTable in dataTableList)
{
foreach(var otherRow in otherDataTable.Rows)
{
var value = row[columnName].ToString();
var otherValue = otherRow[otherColumnName].ToString();
if(otherValue.Length >= compareLength &&
value == otherValue.Substring(0, compareLength))
{
/* Do something. */
}
}
}
}
我敢打赌,当比较值小于6时,Substring
会出现问题。看看是否有帮助。