【发布时间】:2016-07-22 08:05:57
【问题描述】:
我有这个 VB 代码
Public Function InitMeridDataType() As MeridDataType
Dim OutData As MeridDataType
With OutData
.NumCurves = 0
Erase .CurveData
End With
Return OutData
End Function
我使用Telerik Online Tool将此代码转换为C#
C#代码是
public static MeridDataType InitMeridDataType()
{
MeridDataType OutData = default(MeridDataType);
var _with1 = OutData;
_with1.NumCurves = 0;
_with1.CurveData = null;
return OutData;
}
MeridDataType 在 VB 中定义为
Public Structure MeridDataType
Dim NumCurves As Short
Dim CurveData() As CurveDataType
End Structure
我觉得 C# 代码存在严重问题。它不应该返回 _with1 吗?
我写的一个版本是
public static MeridDataType InitMeridDataType()
{
MeridDataType OutData = default(MeridDataType);
//var _with1 = OutData;
OutData .NumCurves = 0;
OutData .CurveData = null;
return OutData;
}
有什么线索吗?
【问题讨论】:
-
我找不到任何使这段代码有意义的结构。如果
MeridDataType是引用类型,则此代码应始终生成NullReferenceException。如果MeridDataType是值类型,那么原始With块应该已被编译器拒绝,因为您只能读取 成员并调用此类With块中的方法。跨度> -
@Damien_The_Unbeliever 我同意。一些简单的测试表明,上述工具并不关心代码的(语义)有效性。它会愉快地转换导致 NRE 的代码而不会出现问题。所以,我猜原来的 VB.NET 代码也有“问题”,它们是“正确”转换的 ;-)
-
整个方法在c#中是没有意义的,这是结构的默认构造函数无论如何都会做的。
-
一分钱一分货。无论如何它都会起作用。