对c#中通过ref/value传递感到困惑

本文关键字:value ref | 更新日期: 2023-09-27 18:17:49

由于我还在学习c#,所以在标题中有些东西对我来说还没有点击,下面是一些我正在使用的真正基本的代码,只是为了掌握它。

    [TestMethod]
    public void Pass()
    {
        int x = 4;
        Increment(x);
        Assert.AreEqual(5, x);
    }
    void Increment(int num)
    {
        num++;
    }

我知道如果我添加ref,它会工作得很好,但是我看到使用它并不总是最好的情况。我可以做什么,而不是使用ref和为什么?

对c#中通过ref/value传递感到困惑

  1. 不要改变调用者的状态。返回新的int值作为返回值。一般情况下应避免状态突变。
  2. 如果可用,继续使用ref。除了状态突变问题之外,它没有任何问题。
  3. 使用堆上的对象,例如内置的class IntHolder { int MyInt; }StrongBox<int>
如果你告诉我们更多的背景,我们可以推荐一个具体的解决方案。
[TestMethod] public void Pass() {
    int x = 4;
    x = Increment(x);
   Assert.AreEqual(5, x);
 }
int Increment(int num) {return ++num; }

如果你设置不使用passing by ref.

本质上,当不通过ref传递时,你给被调用的方法一个原始对象的副本。所以你在增量中对它的更改不会反映在原始值上(除非像这里一样,你从方法返回新值并在赋值中使用它)。

当通过ref传递时,你给被调用的方法一个对原始对象的引用。在这种情况下,任何修改都是在原来的基础上进行的。

希望对你有帮助。