C # alternative to VB code

I have this VB code

Try
    For i = 0 To OutData.NumMerids - 1
        With OutData.MeridData(0)
            .NumCurves = InStepFiveData.ConvexSurfaceData.MultiCurveData.NumOzCurves + InStepFiveData.ConvexSurfaceData.MultiCurveData.NumLenticularCurves
            ReDim .CurveData(.NumCurves - 1)
        End With
    Next
    ...

I want to generate similar C # code. I used some logic and read the code below.

try
{
    for (i = 0; i <= OutData.NumMerids - 1; i++)
    {
        //   var _with25 = OutData.MeridData[0];
        OutData.MeridData[0].NumCurves =(short) (InStepFiveData.ConvexSurfaceData.MultiCurveData.NumOzCurves + InStepFiveData.ConvexSurfaceData.MultiCurveData.NumLenticularCurves);
        // ERROR: Not supported in C#: ReDimStatement
        Array.Resize(ref OutData.MeridData[0].CurveData, OutData.MeridData[0].NumCurves - 1);
    }
    ...
}

Just want to know that I'm doing something wrong?

thank

+4
source share
3 answers

The error is in the expression Array.Resize; more specifically, in the indicated size.

In VB.Net you specify the last index of the array, where in C # you specify the length of the array.
Thus, there is a shift of 1 between them.

ReDim .CurveData(.NumCurves - 1)
' equivalent to
ReDim .CurveData(0 To .NumCurves - 1) ' length is (.NumCurves - 1) - 0 + 1 = .NumCurves

This is due to the fact that in VB6 you can have an array indexed in a different base than 0 (in particular, 1 indexed set) and therefore it was valid ( it is not in VB.Net )

Dim someArray(-4 To 5) As Integer ' declares an array of 10 integer indexed from -4 to 5

,

//Array.Resize(ref OutData.MeridData[0].CurveData, OutData.MeridData[0].NumCurves - 1);
// replaced by
Array.Resize(ref OutData.MeridData[0].CurveData, OutData.MeridData[0].NumCurves);

, ; ReDim ( , ReDim Array.Resize .Net)

:

answer Array.Resize - Redim Preserve not ReDim ( )

+2

( ) "ReDim" "ReDim Preserve". ReDim 'new' :

OutData.MeridData[0].CurveData = new Foo[OutData.MeridData[0].NumCurves];

( "CurveData" , "Foo" - ).

+2

, /:

# for , .

for(var i = 0; i < 100; i++) {

, , i - , , , .

VB With . ( , , With .) , - . , OutData.MeridData[0] InStepFiveData.ConvexSurfaceData.MultiCurveData, , . .

@Dave Doknjas Redim , . Redim , . Redim Preserve Array.Copy .

try {
   for (var i = 0; i <= OutData.NumMerids - 1; i++) {
      var meridData = OutData.MeridData[0];
      var curveData = InStepFiveData.ConvexSurfaceData.MultiCurveData;
      meridData.NumCurves = (short)(curveData.NumOzCurves + curveData.NumLenticularCurves);
      meridData.CurveData = new Foo[meridData.NumCurves];
   }
}
+1

Source: https://habr.com/ru/post/1648734/


All Articles