【问题标题】:C# struct partially initializationC# struct 部分初始化
【发布时间】:2011-07-29 00:09:06
【问题描述】:

我有一个参数结构:

public struct MyParams
{
   public int    Param1;
   public int    Param2;
   public string Param3;
   public string Param4;
}

这是跨应用程序使用的通用结构。在某些情况下,我只需要初始化一个成员,而不使用另一个成员。我可以这样初始化结构:

MyParams testParams = default(MyParams);
testParams.Param2 = 3;
FunctionX(testParams);

我也可以在函数调用中直接初始化 struct,但在这种情况下,我必须为所有成员指定值:

FunctionX(new MyParams{Param1=0,Param2=3,Param3=string.Empty,Param4=string.Empty});

我的问题是我可以在函数调用行中初始化结构并只指定一个对我来说足够的成员,而另一个成员将采用默认值

提前致谢!

【问题讨论】:

    标签: c# struct initialization default-value


    【解决方案1】:

    初始化struct时,所有成员都会被初始化为默认值:

    MyParams p = new MyParams() { Param3 = "Test" };
    

    这会给你留下:

    参数 1 == 0;
    参数 2 == 0;
    Param3 == "测试";
    参数 4 == 空;

    【讨论】:

      【解决方案2】:

      来自11.3.4 Default values

      我引用:

      但是,由于结构是值类型 不能为空,默认值 结构的值是由 将所有值类型字段设置为其 默认值和所有引用类型 字段为空。

      【讨论】:

      • 哇。似乎我暂时对结构初始化感到困惑。真的可以调用 FunctionX(new MyParams{Param2=0});和蜜蜂快乐。谢谢你的回答!
      • 所以答案是是的,你可以
      • 调用FunctionX(new MyParams() {Param2=0}); 将等同于FunctionX(new MyParams());
      猜你喜欢
      • 1970-01-01
      • 2017-07-21
      • 2021-09-21
      • 1970-01-01
      • 2016-09-29
      • 2020-11-01
      • 2019-07-10
      • 1970-01-01
      相关资源
      最近更新 更多