我有这个VB方法,我转换为C#
Public Function GetToricData(ByRef SaveFileName As String) As ToricDataType
Dim filenumber As Short
Dim InString As String = ""
filenumber = FreeFile()
If System.IO.File.Exists(SaveFileName) Then
With GetToricData
FileOpen(filenumber, SaveFileName, OpenMode.Input)
Input(filenumber, InString)
If IsNumeric(InString) Then
.ToricAppDiam = Convert.ToDouble(InString)
End If
Input(filenumber, InString)
If IsNumeric(InString) Then
.NumToricOpticZones = Convert.ToInt16(InString)
End If
FileClose(filenumber)
End With
Else
With GetToricData
.NumToricOpticZones = 20
.ToricAppDiam = 3
End With
SaveToricData(SaveFileName, GetToricData)
End If
End Function
使用Telerik Online Converter转换为C#我得到了这个
public static FrontEndStructures.ToricDataType GetToricData(ref string SaveFileName)
{
var title = ((AssemblyTitleAttribute)System.Reflection.Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false)[0]).Title;
FrontEndStructures.ToricDataType functionReturnValue = default(FrontEndStructures.ToricDataType);
//FrontEndStructures.ToricDataType functionReturnValue = new FrontEndStructures.ToricDataType();
int filenumber = 0;
string InString = "";
filenumber = FileSystem.FreeFile();
if (System.IO.File.Exists(SaveFileName))
{
var _with38 = functionReturnValue;
FileSystem.FileOpen(filenumber, SaveFileName, OpenMode.Input);
FileSystem.Input(filenumber,ref InString);
if (Information.IsNumeric(InString))
{
_with38.ToricAppDiam = Convert.ToDouble(InString);
}
FileSystem.Input(filenumber,ref InString);
if (Information.IsNumeric(InString))
{
_with38.NumToricOpticZones = Convert.ToInt16(InString);
}
FileSystem.FileClose(filenumber);
}
else
{
var _with39 = functionReturnValue;
_with39.NumToricOpticZones = 20;
_with39.ToricAppDiam = 3;
SaveToricData(ref SaveFileName, ref _with39);
}
return functionReturnValue;
}
ToricDataType 定义为
public struct ToricDataType
{
public double ToricAppDiam;
public short NumToricOpticZones;
}
我想知道这条线的意义是什么
FrontEndStructures.ToricDataType functionReturnValue = 默认(FrontEndStructures.ToricDataType);
为什么在线工具使用默认关键字以及为什么新关键字无法使用? 由于类是结构类型而结构是值类型,因此分配的内存(堆栈或堆)以及数据成员的初始化方式在哪里?
我期待对此进行详细解释,并希望知道使用新 运算符会帮助我达到同样的目的吗?
答案 0 :(得分:2)
C#null
与VB Nothing
不完全相同。在VB中,Nothing
表示类型的默认值。对于作为空引用的引用类型,以及对于其所有字段都设置为默认值的值的值类型。在C#中,null
表示引用类型的空引用,但不能用于初始化值类型。 default
运算符完成了为值类型提供默认值的等效工作。
另请注意,与VB不同,C#函数没有默认返回值。在VB中,您可以分配以函数命名的隐式局部变量,如果未命中显式Return
语句,则返回该值。在C#中,您必须显式返回一些内容,因此需要额外的局部变量。我真的建议不要在VB中使用隐式返回。显式返回使您的代码更清晰。
编辑:您可以使用new
关键字创建新实例并具有相同的效果。您必须使用default
的一种情况是,您传递的类型是泛型类型参数,在这种情况下,您通常不会知道它是引用类型还是值类型。