这肯定已经回答了,但我找不到答案:
有一种快速提供的方法可以将struct
C#归零,还是我必须自己提供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 次 |
最近记录: |