改变方法中的结构
本文关键字:结构 方法 改变 | 更新日期: 2023-09-27 18:17:03
如何在外部方法中改变结构?
public void ChangeStruct (MyStruct myStruct) {
myStruct.field1 = 10;
return;
}
当我将struct传递给ChangeStruct方法时,我希望myStruct在该方法之后被改变。
您需要传递一个引用到结构体,而不是使用ref
关键字的副本:
public void ChangeStruct (ref MyStruct myStruct)
{
myStruct.field1 = 10;
}
ChangeStruct(ref someStruct);
你当前的代码在进入方法之前创建了一个结构体的完整的逐位拷贝,你正在修改的就是这个拷贝,ref关键字强制调用者传递一个引用(托管指针)到结构体,而不是复制。
您可以使用ref
关键字来观察结构体的变化,但是在总体方案中,如果您只是使用一个类,您将处于一个更少伤害的世界。
关于何时使用或不使用结构体的想法,您可以参考此链接。一个可能对您有帮助的简短代码片段:
不要定义结构体,除非该类型具有以下所有特征:
- 逻辑上表示单个值,类似于基本类型(整型、双精度等)。
- 实例大小小于16字节。
- 它是不可变的。
- 不需要经常装箱。
结构是值类型,必须使用ref关键字来防止复制。不建议使用ref和out,参见使用c# ref关键字何时是个好主意?