我在VB6中有以下代码:
Dim frpdReport() As REPORTDEF
For iCounter = 0 To UBound(frpdReport)
With frpdReport(iCounter)
If .iReportID = iReportID Then
fGetReportFile = .tReportFile
End If
End With
Next iCounter
我转换为这个C#代码:
REPORTDEF[] frpdReport = new REPORTDEF[6];
for (iCounter = 0; iCounter < Convert.ToInt32(frpdReport[6]); iCounter++)
{
if (frpdReport[iCounter].iReportID == iReportID)
{
fGetReportFile_return = frpdReport[iCounter].tReportFile;
}
}
return fGetReportFile_return;
调试时,我在for语句中遇到以下错误 - “索引超出了数组的范围。”我无法弄清楚为什么因为数组的索引是6。
请帮忙吗?
答案 0 :(得分:5)
为什么不使用.length属性?
for (iCounter = 0; iCounter < frpdReport.Length; iCounter++)
或者如果您不需要计数器值,则为每个
foreach (REPORTDEF frpReportItem in frpdReport)
或者如果您正在寻找特定项目,请使用LINQ
REPORTDEF fGetReportFile_return = frpdReport.Where( fR => fR.iReportID == iReportID).Single();
答案 1 :(得分:2)
您可以使用arrayName.Length
获取数组的长度。
for (iCounter = 0; iCounter < frpdReport.Length; iCounter++)
{
if (frpdReport[iCounter].iReportID == iReportID)
{
fGetReportFile_return = frpdReport[iCounter].tReportFile;
}
}
return fGetReportFile_return;
或简单的foreach
构造:
foreach (REPORTDEF frpdReportItem in frpdReport)
{
if (frpdReportItem.iReportID == iReportID)
{
fGetReportFile_return = frpdReportItem.tReportFile;
}
}
return fGetReportFile_return;
答案 2 :(得分:1)
这一行错了:
for (iCounter = 0; iCounter < Convert.ToInt32(frpdReport[6]); iCounter++)
应该是:
for (iCounter = 0; iCounter < 6; iCounter++)
frpdReport
被定义为六元素数组;在C#中,数组从零开始,因此frpdReport[6]
将生成错误,因为只有0到5的元素。
答案 3 :(得分:0)
REPORTDEF[6]
定义了6个元素,从0到5。
Convert.ToInt32(frpdReport[6])
似乎没有任何意义。您正在将结构转换为数字。