有没有一种快速的方法可以在C#中对结构进行归零?

Ed *_*ing 13 c# struct

这肯定已经回答了,但我找不到答案:

有一种快速提供的方法可以将structC#归零,还是我必须自己提供someMagicalMethod

为了清楚起见,我知道结构将初始化为0,我想知道是否有一种快速的方法将值重置为0.

也就是说,

struct ChocolateBar {
    int length;
    int girth;
}

static void Main(string[] args) {
    ChocolateBar myLunch = new ChocolateBar();
    myLunch.length = 100;
    myLunch.girth  = 10;

    // Eating frenzy...
    // ChocolateBar.someMagicalMethod(myLunch);

    // myLunch.length = 0U;
    // myLunch.girth = 0U;
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 26

只需使用:

myLunch = new ChocolateBar();
Run Code Online (Sandbox Code Playgroud)

要么

myLunch = default(ChocolateBar);
Run Code Online (Sandbox Code Playgroud)

它们等效于1,并且最终都会将新的"所有字段设置为零"值分配给myLunch.

另外,理想情况下不要使用可变结构 - 我通常更喜欢创建一个不可变的结构,但是它的方法返回一个特定字段设置不同的值,例如

ChocolateBar myLunch = new ChocolateBar().WithLength(100).WithGirth(10);
Run Code Online (Sandbox Code Playgroud)

......当然也提供适当的构造函数:

ChocolateBar myLunch = new ChocolarBar(100, 10);
Run Code Online (Sandbox Code Playgroud)

1至少对于在C#中声明的结构.值类型可以在IL中具有自定义无参数构造函数,但是相对难以预测C#编译器将调用它的情况而不是仅使用默认的"零"值.


Ufu*_*arı 11

只需在代码中调用无参数构造函数:

ChocolateBar chocolateBar = new ChocolateBar();
Run Code Online (Sandbox Code Playgroud)


Pet*_*ter 5

new ChocolateBar被初始化为零.所以:

myLunch = new ChocolateBar();
Run Code Online (Sandbox Code Playgroud)

这只能起作用,因为ChocolateBar它是结构/值类型.如果ChocolateBar是一个类,这将创建一个新的,ChocolateBarmyLunch指向它的更改.ChocolateBar存储的值myLunch将为零.旧的ChocolateBar将保持不变,并最终被垃圾收集器声称,除非其他一些参考指向旧的myLunch.