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