我想通过引用传递一个数组元素(数组包含值类型元素,而不是ref类型)。
这可能吗?谢谢
答案 0 :(得分:8)
是的,这绝对可能,与您通过引用传递任何其他变量的方式完全相同:
using System;
class Test
{
static void Main(string[] args)
{
int[] values = new int[10];
Foo(ref values[0]);
Console.WriteLine(values[0]); // 10
}
static void Foo(ref int x)
{
x = 10;
}
}
这是有效的,因为数组被视为"变量的集合"因此values[0]
被归类为变量 - 您将无法执行List<int>
,其中list[0]
将被归类为值。< / p>
答案 1 :(得分:1)
作为Jon回答的补充,从C#7开始,您现在可以使用“ ref local”内联地进行此类操作,而无需使用包装方法。请注意,语法中必须同时使用“ ref”关键字。
static void Main(string[] args)
{
int[] values = new int[10];
ref var localRef = ref values[0];
localRef = 10;
//... other stuff
localRef = 20;
Console.WriteLine(values[0]); // 20
}
这对于需要在单个方法中多次引用或更新数组中相同位置的情况很有用。它可以帮助我避免输入错误,并且给变量命名使我忘记了array [x]指的是什么。
链接: https://www.c-sharpcorner.com/article/working-with-ref-returns-and-ref-local-in-c-sharp-7-0/ https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/ref-returns