2012-07-25 138 views
3

我在VB6下面的代码:UBound函数阵列VB6转换到C#

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.

请帮忙吗?

+1

需要注意的是这些代码样本甚至不会启动,并且'Dim'后面的VB6样本中缺少一些内容,因为这会导致单元化数组失败。 – Deanna 2012-07-25 14:00:36

回答

5

为什么不使用。长度属性?

for (iCounter = 0; iCounter < frpdReport.Length; iCounter++) 

,或者如果你不需要计数器值,每个

foreach (REPORTDEF frpReportItem in frpdReport) 

或者,如果你正在寻找一个特定项目,使用LINQ

REPORTDEF fGetReportFile_return = frpdReport.Where(fR => fR.iReportID == iReportID).Single(); 
0

REPORTDEF[6]限定6种元素,从0到5

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

+0

这就是对的。我正在用1bb vb6工作,忘记c#是基于0的。感谢您向我提出的观点。 – user1551783 2012-07-25 14:10:28

1

这条线是错误的:

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

它应该是:

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

frpdReport被定义为一个六元件阵列;在C#中,数组是从零开始的,所以frpdReport[6]将生成一个错误,因为只有元素0到5.

+1

那就对了。我正在用1bb vb6工作,忘记c#是基于0的。感谢您向我提出的观点。 – user1551783 2012-07-25 14:10:20

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;