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++)

または、カウンター値が必要ない場合は、 for each

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++)

frpdReport6 要素の配列として定義されました。C# では、配列は 0 から始まるためfrpdReport[6]、0 から 5 までの要素しかないため、エラーが発生します。

于 2012-07-25T14:01:18.233 に答える
0

REPORTDEF[6]0 から 5 までの 6 つの要素を定義します。

Convert.ToInt32(frpdReport[6])まったく意味がないようです。構造体を数値に変換しています。

于 2012-07-25T14:01:14.630 に答える