[英]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.