从表中获取值作为参考

时间:2017-04-06 12:55:22

标签: c# visual-studio reference ref

在c ++中,它可以通过引用(&)或指针(*)来实现。在C#中有" ref"。如何从表中获取值并通过引用来更改它?

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            int[] t=new int[3]{1,2,3};
            int a=t[0]; //ref int a=t[0];
            a+=10;
            System.Console.WriteLine("a={0}", a);   //11
            System.Console.WriteLine("t[0]={0}", t[0]); //1
        }
    }
}

E.g。在c ++中

int &a=tab[0];

3 个答案:

答案 0 :(得分:6)

这在C#7中变得可行,使用 ref locals

public class Program
{
    public static void Main(string[] args)
    {
        int[] t = {1, 2, 3};
        ref int a = ref t[0];
        a += 10;
        System.Console.WriteLine($"a={a}");       // 11
        System.Console.WriteLine($"t[0]={t[0]}"); // 11
    }
}

这是重要的一句话:

ref int a = ref t[0];

C#7还支持 ref return 。我建议谨慎地使用这两个功能 - 虽然它们肯定是有用的,但对于许多C#开发人员来说它们并不熟悉,我可以看到它们造成了很大的混乱。

答案 1 :(得分:1)

指针处于不安全模式

unsafe
{
      int[] t = new int[3] { 1, 2, 3 };
      fixed (int* lastPointOfArray = &t[2])
      {
          *lastPointOfArray = 6;
          Console.WriteLine("last item of array {0}", t[2]); // =>> last item of array 6
      }
}

答案 2 :(得分:-1)

没有。像int这样的值类型是不可能的。但是,它是参考类型的标准。

例如:

class MyClass
{
    public int MyProperty {get; set;}
}

void Main()
{
    var t=new MyClass[3]{new MyClass {MyProperty=1},new MyClass {MyProperty=2},new MyClass {MyProperty=3}};
    var a=t[0]; //ref int a=t[0];
    a.MyProperty+= 10;
    System.Console.WriteLine("a={0}", a.MyProperty);   //11
    System.Console.WriteLine("t[0]={0}", t[0].MyProperty); //11
}

给出了预期的结果。

编辑:显然我落后了。正如Jon Skeet在C#7.0中指出的那样。