簡體   English   中英

C#中的Redim語句替代方法-代碼產生錯誤

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

我知道C#中沒有Redim語句。 我用VB編寫了這段舊代碼,並使用Telerik Tool將其轉換為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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM