3

我在 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。

请问有什么帮助吗?

4

4 回答 4

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();
于 2012-07-25T14:04:45.787 回答
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; 
于 2012-07-25T14:03:12.810 回答
1

这一行是错误的:

for (iCounter = 0; iCounter < Convert.ToInt32(frpdReport[6]); iCounter++)

它应该是:

for (iCounter = 0; iCounter < 6; iCounter++)

frpdReport被定义为一个六元素数组;在 C# 中,数组是从零开始的,因此frpdReport[6]会产生错误,因为只有元素 0 到 5。

于 2012-07-25T14:01:18.233 回答
0

REPORTDEF[6]定义了 6 个元素,从 0 到 5。

Convert.ToInt32(frpdReport[6])似乎根本没有意义。您正在将结构转换为数字。

于 2012-07-25T14:01:14.630 回答