对于在c#

时间:2015-10-14 22:19:08

标签: c#

正如标题中的内容还没有点击给我,因为我还在学习c#,以下是一些非常基本的代码,我只是用它来掌握它。

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

我知道如果我添加ref就可以了,但是我已经看到使用它并不总是最好的情况。 我能做什么而不是使用ref为什么?

2 个答案:

答案 0 :(得分:4)

  1. 不要在来电者中改变状态。返回新的int值作为返回值。一般来说,应该避免状态突变。
  2. 如果可用,继续使用ref。除了状态突变问题外,它没有任何问题。
  3. 使用堆上的对象,例如内置的class IntHolder { int MyInt; }StrongBox<int>
  4. 如果您告诉我们更多情况,我们可以推荐一个特定的解决方案。

答案 1 :(得分:1)

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

int Increment(int num) {return ++num; }

如果你的设置不使用传递参考

,这应该有效

基本上,当没有通过ref传递时,你给被调用的方法一个原始对象的副本。因此,您在Increment中对它的更改不会反映在原始文件中(除非您在此处返回方法中的新值并在分配中使用它)。

当通过ref传递时,为被调用的方法提供对原始对象的引用。在这种情况下,任何修正案都是在原件上进行的。

希望有所帮助。