gpt4 book ai didi

c# - 为什么在访问结构时需要默认值?

转载 作者:行者123 更新时间:2023-11-30 23:23:31 25 4
gpt4 key购买 nike

我将这个 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 = default(FrontEndStructures.ToricDataType);

为什么在线工具使用Default关键字,为什么不能使用new关键字?由于类是结构类型而结构是值类型,因此内存分配在哪里(堆栈或堆)以及如何初始化数据成员?

我期待对此的详细解释,并想知道使用 new operator 是否会帮助我实现相同的目的?

最佳答案

C# null 与 VB Nothing 不太一样。在 VB 中,Nothing 表示类型的默认值。对于一个空引用的引用类型和一个值类型,它的所有字段都设置为默认值。在 C# 中,null 表示引用类型的空引用,但不能用于初始化值类型。 default 运算符执行为值类型提供默认值的等效工作。

另请注意,与 VB 不同,C# 函数没有默认返回值。在 VB 中,您可以分配给以函数命名的隐式局部变量,如果未命中显式 Return 语句,则返回该值。在 C# 中,您必须显式返回某些内容,因此需要额外的局部变量。我真的建议无论如何不要在 VB 中使用隐式返回。显式返回让您的代码更清晰。

编辑:您可以使用 new 关键字来创建一个新实例并具有相同的效果。您必须使用 default 的一种情况是当您传递给它的类型是泛型类型参数时,在这种情况下您通常不知道它是引用类型还是值类型。

关于c# - 为什么在访问结构时需要默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38344407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com