UBound Array vb6转换为C#

时间:2012-07-25 13:57:49

标签: c# visual-studio-2010 vb6 vb6-migration

我在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 个答案:

答案 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])似乎没有任何意义。您正在将结构转换为数字。