2012-07-25 195 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;