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

阿波罗夫

我有这个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#转换为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函数返回值=默认值(FrontEndStructures.ToricDataType);

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

我期待对此进行详细说明,并想知道使用new 运算符将帮助我达到相同的目的还是没有?

金西尼

C#null与VB不太相同Nothing在VB中,Nothing表示类型的默认值。对于为空引用的引用类型以及对于值为其所有字段均设置为默认值的值的值类型。在C#中,null表示对引用类型的空引用,但不能用于初始化值类型。default运营商确实为值类型提供一个默认值相当于工作。

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么需要默认值呢?

来自分类Dev

为什么需要“-人类可读”而不是默认值?

来自分类Dev

使用:=时,为什么with = TRUE是默认值?

来自分类Dev

为什么nullglob不是默认值?

来自分类Dev

为什么C#调用者信息属性需要默认值?

来自分类Dev

为什么在使用||时使用“意外的“。”” 括号中默认值的运算符

来自分类Dev

使用G1收集器时,为什么-XX:+ ExplicitGCInvokesConcurrent不是默认值?

来自分类Dev

创建Postgresql表时,为什么出现“多个默认值”错误?

来自分类Dev

从super()运行方法时,为什么字段未初始化为非默认值?

来自分类Dev

为什么在SSRS 2012中允许为null时无法使用默认值

来自分类Dev

结构的默认值(字符)

来自分类Dev

为什么默认(结构值)数组初始化需要复制特征?

来自分类Dev

为什么此结构需要大小值?

来自分类Dev

为什么在实现中允许使用与在接口上定义的默认值不同的默认值?

来自分类Dev

为什么RandomForestClassifier中的max_features的默认值与RandomForestRegressor中的默认值不同?

来自分类Dev

Django 1.7.1需要字段的默认值-但数据库中没有条目。为什么?

来自分类Dev

Django 1.7.1需要字段的默认值-但数据库中没有条目。为什么?

来自分类Dev

Java:为什么未使用XX:SurvivorRatio的默认值?

来自分类Dev

为什么要推动匹配Git中的默认值?

来自分类Dev

为什么out参数没有默认值?

来自分类Dev

为什么我的argparse不显示默认值?

来自分类Dev

为什么我的DropDownListFor的默认值无法正常工作?

来自分类Dev

TEXT列的MySQL默认值行为异常,为什么?

来自分类Dev

为什么constexpr不是所有函数的默认值?

来自分类Dev

为什么constexpr不能只是默认值?

来自分类Dev

为什么FreezeGun不使用SQLAlchemy默认值?

来自分类Dev

为什么Mockito verifyNoMoreInteractions的Scala默认值有问题

来自分类Dev

为什么可选参数的默认值必须为常数?

来自分类Dev

为什么打印屏幕采用默认值

Related 相关文章

  1. 1

    为什么需要默认值呢?

  2. 2

    为什么需要“-人类可读”而不是默认值?

  3. 3

    使用:=时,为什么with = TRUE是默认值?

  4. 4

    为什么nullglob不是默认值?

  5. 5

    为什么C#调用者信息属性需要默认值?

  6. 6

    为什么在使用||时使用“意外的“。”” 括号中默认值的运算符

  7. 7

    使用G1收集器时,为什么-XX:+ ExplicitGCInvokesConcurrent不是默认值?

  8. 8

    创建Postgresql表时,为什么出现“多个默认值”错误?

  9. 9

    从super()运行方法时,为什么字段未初始化为非默认值?

  10. 10

    为什么在SSRS 2012中允许为null时无法使用默认值

  11. 11

    结构的默认值(字符)

  12. 12

    为什么默认(结构值)数组初始化需要复制特征?

  13. 13

    为什么此结构需要大小值?

  14. 14

    为什么在实现中允许使用与在接口上定义的默认值不同的默认值?

  15. 15

    为什么RandomForestClassifier中的max_features的默认值与RandomForestRegressor中的默认值不同?

  16. 16

    Django 1.7.1需要字段的默认值-但数据库中没有条目。为什么?

  17. 17

    Django 1.7.1需要字段的默认值-但数据库中没有条目。为什么?

  18. 18

    Java:为什么未使用XX:SurvivorRatio的默认值?

  19. 19

    为什么要推动匹配Git中的默认值?

  20. 20

    为什么out参数没有默认值?

  21. 21

    为什么我的argparse不显示默认值?

  22. 22

    为什么我的DropDownListFor的默认值无法正常工作?

  23. 23

    TEXT列的MySQL默认值行为异常,为什么?

  24. 24

    为什么constexpr不是所有函数的默认值?

  25. 25

    为什么constexpr不能只是默认值?

  26. 26

    为什么FreezeGun不使用SQLAlchemy默认值?

  27. 27

    为什么Mockito verifyNoMoreInteractions的Scala默认值有问题

  28. 28

    为什么可选参数的默认值必须为常数?

  29. 29

    为什么打印屏幕采用默认值

热门标签

归档