在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];
答案 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中指出的那样。