改变方法中的结构

本文关键字:结构 方法 改变 | 更新日期: 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关键字何时是个好主意?