是否可以强制operator ** default(MyStructType)**使用预定义值初始化struct

时间:2011-11-21 13:23:50

标签: c# default default-value

我有一个结构类型:

struct test1
{            
  public int a;
  public int b;
  public double c;
  public string d;
}

以下行为我提供了“清除”结构对象,其中字段已使用其默认值进行初始化:

test1 tt = default(test1);
// tt.a will be equal 0

但是现在,我希望有机会为结构类型中的某些字段预定义默认值。例如,我希望字段 a 25 作为默认值。

是否可以强制默认运算符使用我预定义的默认值初始化我的结构?

2 个答案:

答案 0 :(得分:1)

不,这是不可能的。

不同的类型已经有明确的默认值:

  • null用于参考类型。
  • 0或0.0表示整数和浮点类型。

我认为默认DateTime只是对其内部字段的解释(从纪元起0 * 100纳秒)。

您无法覆盖或更改default运算符的工作方式。

答案 1 :(得分:1)

您的字段将初始化为其类型的默认值,但您可以使用属性使其行为就像设置默认值一样。

在这个片段中,我们使用了一个可以为null的int但是暴露了一个int。如果支持字段的值为null,我们知道我们正在处理新的/默认实例,并且需要提供默认值。

    struct test1
    {
        private int? a;

        public int A
        {
            get { return a ?? 25; }
            set { a = value; }
        }
    }