C#中的Redim语句替代方案 - 代码给出错误



我知道C#中没有Redim语句。我用VB编写了此旧代码,然后使用Telerik工具将其转换为C#。现在,当在线工具遇到Redim语句时,该工具发表了一些评论。VB代码和C#代码在下面给出。

Public Function ReadMultiCurvedDataFromFile(ByRef filenumber As Short) As ConvexMultiCurveDataType
        Dim i As Short
        Dim OutData As ConvexMultiCurveDataType = InitConvexMultiCurveDataType()
        Try
            With OutData
                FileGet(filenumber, .BlendFactor)
                FileGet(filenumber, .EdgeRadius)
                FileGet(filenumber, .OZShapeFactor)
                FileGet(filenumber, .OZPrismOffset)
                FileGet(filenumber, .NumOzCurves)
                If .NumOzCurves > 0 Then
                    ReDim .OZCurveData(.NumOzCurves - 1)
                    For i = 0 To .NumOzCurves - 1
                        FileGet(filenumber, .OZCurveData(i))
                    Next
                End If
                FileGet(filenumber, .NumLenticularCurves)
                If .NumLenticularCurves > 0 Then
                    ReDim .CurveData(.NumLenticularCurves - 1)
                    For i = 0 To .NumLenticularCurves - 1
                        FileGet(filenumber, .CurveData(i))
                    Next
                End If
            End With
        Catch ex As Exception
        End Try
        Return OutData
    End Function

C#代码

public static Mold_Power_Suite.Model.ConvexSurfaceStructures.ConvexMultiCurveDataType ReadMultiCurvedDataFromFile(ref short filenumber)
        {
            int filenumber1 = filenumber;
            long i = 0;
            Mold_Power_Suite.Model.ConvexSurfaceStructures.ConvexMultiCurveDataType OutData =ConvexSurfaceStructures. InitConvexMultiCurveDataType();
            try
            {
                var _with30 = OutData;
                FileSystem.FileGet(filenumber,ref _with30.BlendFactor);
                FileSystem.FileGet(filenumber,ref _with30.EdgeRadius);
                FileSystem.FileGet(filenumber,ref _with30.OZShapeFactor);
                FileSystem.FileGet(filenumber, ref _with30.OZPrismOffset);
                FileSystem.FileGet(filenumber,ref _with30.NumOzCurves);
                if (_with30.NumOzCurves > 0)
                {
                    //Array.Resize();
                    // ERROR: Not supported in C#: ReDimStatement
                    for ( i = 0; i <= _with30.NumOzCurves - 1; i++)
                    {
                        FileSystem.FileGet(filenumber1, ref  _with30.OZCurveData[i]); // GETTING MENTIONED ERROR HERE
                    }
                }
                FileSystem.FileGet(filenumber,ref _with30.NumLenticularCurves);
                if (_with30.NumLenticularCurves > 0)
                {
                    // ERROR: Not supported in C#: ReDimStatement
                    for (i = 0; i <= _with30.NumLenticularCurves - 1; i++)
                    {
                        FileSystem.FileGet(filenumber1, ref _with30.CurveData[i]); //GETTING MENTIONED ERROR HERE
                    }
                }
            }
            catch (Exception ex)
            {
            }
            return OutData;
        }

ozcurvedata 已定义为

 Dim OZCurveData() As ConvexOZCurveDataType
Public Structure ConvexOZCurveDataType
        Dim SphereRadius As Double
        Dim CylRadius As Double
        Dim Diameter As Double
        Dim Addition As Double
    End Structure

我在上述行中遇到错误。错误是

'Microsoft.visualbasic.filesystem.fileget(int,ref System.dateTime,long)的最佳超载方法匹配'有一些无效的参数

Redim也是一个问题。

VB.NET是"允许的",因此您可以通过ByRef传递预期的类型。在我们的情况下,在VB中,FileGet(Integer, ByRef ValueType)被调用。C#不允许这样做,因此您需要创建一个类型ValueType的临时对象并分配给OZCurveData/CurveData,然后将其传递给FileGet,然后将临时对象的值分配给OZCurveData/CurveData。例如:

ValueType vObj = _with30.OZCurveData[i];
Microsoft.VisualBasic.FileSystem.FileGet(1, ref vObj);
_with30.OZCurveData[i] = (ConvexOZCurveDataType)vObj ;

关于Redim,您可以使用Array.Resize(如@gaurav Singh Jantwal所说):

Array.Resize(ref _with30.OZCurveData, _with30.NumOzCurves - 1);

最新更新