【问题标题】:change struct in method更改方法中的结构
【发布时间】:2011-12-07 00:15:45
【问题描述】:

如何更改外部方法中的结构?

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

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

【问题讨论】:

  • 在这种情况下您使用struct 有什么特别的原因吗?
  • 拜托,不要创建可变的structs。

标签: c# .net


【解决方案1】:

您需要使用ref keyword 传递对结构的引用而不是副本:

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

ChangeStruct(ref someStruct);

您当前的代码在进入方法之前创建结构的完整逐位副本,并且您正在修改这个副本, ref 关键字强制调用者将引用(托管指针)传递给结构而不是副本。

【讨论】:

  • 我被说服这个问题已经被问过了,但找不到重复的。无论如何,答案很简单......
【解决方案2】:

您可以使用ref 关键字来观察结构的变化,但在宏伟的计划中,如果您只使用一个类,您将处于一个更少伤害的世界。

关于何时使用或不使用结构的想法,您可以consult this link。一个可能对您有帮助的快速 sn-p:

除非类型具有以下所有特征,否则不要定义结构:

  • 它在逻辑上表示单个值,类似于原始类型 (整数、双精度等)。
  • 实例大小小于 16 字节。
  • 它是不可变的。
  • 不必经常装箱。

【讨论】:

    【解决方案3】:

    结构是值类型,必须使用 ref 关键字来防止复制。不推荐使用 ref 和 out,见When is using the C# ref keyword ever a good idea?

    【讨论】:

      猜你喜欢
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 2019-02-23
      • 2012-04-10
      • 2015-02-18
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      相关资源
      最近更新 更多