如何更改外部方法中的struct?
public void ChangeStruct (MyStruct myStruct) {
myStruct.field1 = 10;
return;
}
当我在该方法之后将struct传递给ChangeStruct方法时,我希望更改myStruct。
答案 0 :(得分:8)
您需要使用ref
keyword
public void ChangeStruct (ref MyStruct myStruct)
{
myStruct.field1 = 10;
}
ChangeStruct(ref someStruct);
您的当前代码在输入方法之前创建结构的完整位数副本,并且您正在修改此副本,ref关键字强制调用者将引用(托管指针)传递给结构而不是副本。
答案 1 :(得分:5)
你可以使用ref
关键字来观察结构的变化,但是在宏观方案中,如果你只是使用一个类,你将会处于一个受到更少伤害的世界。
关于何时使用或不使用结构的想法,您可以consult this link。您可能会觉得有用的快速代码段:
除非类型具有以下所有特征,否则不要定义结构:
- 它逻辑上表示单个值,类似于原始类型 (整数,双精度等)。
- 实例大小小于16 字节。
- 这是不可改变的。
- 不必频繁装箱。
答案 2 :(得分:2)
结构是值类型,必须使用ref关键字来防止复制。建议不要使用ref和out,请参阅When is using the C# ref keyword ever a good idea?。