改变方法中的结构

时间:2011-12-07 00:15:46

标签: c# .net

如何更改外部方法中的struct?

public void ChangeStruct (MyStruct myStruct) {
   myStruct.field1 = 10;
   return;
}

当我在该方法之后将struct传递给ChangeStruct方法时,我希望更改myStruct。

3 个答案:

答案 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?