ubound c# visual-studio-2010 vb6 vb6-migration

ubound c#



UBound Array vb6 Conversión a C# (4)

¿Por qué no usar la propiedad .length?

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

o si no necesita el valor del contador, a para cada

foreach (REPORTDEF frpReportItem in frpdReport)

O si está buscando un artículo específico, use LINQ

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

Tengo el siguiente código en 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

Y me convertí a este código 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;

Cuando se depura, obtengo el siguiente error en la instrucción for: "El índice estaba fuera de los límites de la matriz". Y no puedo entender por qué dado que el índice de la matriz es 6.

¿Alguna ayuda, por favor?


Esta línea es incorrecta:

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

Debería ser:

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

frpdReport se definió como una matriz de seis elementos; en C #, las matrices están basadas en cero, por lo que frpdReport[6] generará un error, ya que solo hay elementos del 0 al 5.


Puede obtener la longitud de una matriz usando arrayName.Length .

for (iCounter = 0; iCounter < frpdReport.Length; iCounter++) { if (frpdReport[iCounter].iReportID == iReportID) { fGetReportFile_return = frpdReport[iCounter].tReportFile; } } return fGetReportFile_return;

O el simple constructo foreach :

foreach (REPORTDEF frpdReportItem in frpdReport) { if (frpdReportItem.iReportID == iReportID) { fGetReportFile_return = frpdReportItem.tReportFile; } } return fGetReportFile_return;


REPORTDEF[6] define 6 elementos, de 0 a 5.

Convert.ToInt32(frpdReport[6]) no parece tener ningún sentido. Estás convirtiendo una estructura en un número.