简体   繁体   English

C#中的Redim语句替代方法-代码产生错误

[英]Redim Statement alternative in C#- Code giving errors

I know there is no Redim Statement in C#. 我知道C#中没有Redim语句。 I had this old code written in VB and I converted it into C# using Telerik Tool. 我用VB编写了这段旧代码,并使用Telerik Tool将其转换为C#。 Now the online tool gave some comments when it encountered Redim statement. 现在,在线工具在遇到Redim语句时给出了一些注释。 The VB code and the C# code is given below. 下面给出了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# code 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 has been defined as OZCurveData已定义为

 Dim OZCurveData() As ConvexOZCurveDataType

and ConvexOZCurveDataType as ConvexOZCurveDataType

Public Structure ConvexOZCurveDataType
        Dim SphereRadius As Double
        Dim CylRadius As Double
        Dim Diameter As Double
        Dim Addition As Double
    End Structure

I am getting error at the mentioned lines. 我在提到的行出现错误。 The errors is 错误是

The best overloaded method match for 'Microsoft.VisualBasic.FileSystem.FileGet(int, ref System.DateTime, long)' has some invalid arguments 'Microsoft.VisualBasic.FileSystem.FileGet(int,ref System.DateTime,long)'的最佳重载方法匹配具有一些无效的参数

Redim is also an issue. Redim也是一个问题。

VB.NET is "permissive", so you are allowed to pass ByRef a derived type of the expected one. VB.NET是“允许的”,因此您可以通过ByRef传递期望类型的派生类型。 In our case, in VB FileGet(Integer, ByRef ValueType) gets called. 在我们的例子中,在VB中FileGet(Integer, ByRef ValueType) C# doesn't allow this, so you'll need to create a temporary object of type ValueType and assign to it OZCurveData / CurveData , then pass it to FileGet and then assign the value of the temporary object to OZCurveData / CurveData . C#不允许这样做,因此您需要创建一个ValueType类型的临时对象并将其分配给OZCurveData / CurveData ,然后将其传递给FileGet ,然后将该临时对象的值分配给OZCurveData / CurveData Eg: 例如:

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

About Redim , you can use Array.Resize (as @Gaurav Singh Jantwal said): 关于Redim ,您可以使用Array.Resize (如@Gaurav Singh Jantwal所说):

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM