这肯定已经回答了,但我找不到答案:
有一种快速提供的方法可以将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)
new ChocolateBar被初始化为零.所以:
myLunch = new ChocolateBar();
Run Code Online (Sandbox Code Playgroud)
这只能起作用,因为ChocolateBar它是结构/值类型.如果ChocolateBar是一个类,这将创建一个新的,ChocolateBar并myLunch指向它的更改.ChocolateBar存储的值myLunch将为零.旧的ChocolateBar将保持不变,并最终被垃圾收集器声称,除非其他一些参考指向旧的myLunch.
| 归档时间: |
|
| 查看次数: |
2939 次 |
| 最近记录: |