返回值的寿命必须超出方法的执行范围。换句话说,它不能是返回它的方法中的局部变量。它可以是类的实例或静态字段,也可以是传递给方法的参数。尝试返回本地变量会生成编译器错误CS8168,“由于不是参考本地,因此无法通过引用返回本地'obj'”。
我以为我明白了。我知道如果我返回了对局部变量的引用,那么可能会收集该变量,因此我的引用不再引用变量。
但是,我今天了解到,我可以创建一个局部变量,然后返回对该局部变量上的字段的引用。为了显示:
using System;
namespace IAmConfused
{
class Program
{
static void Main(string[] args)
{
var foo = new Foo();
ref int barInt = ref foo.GetInt();
Console.WriteLine(barInt); //Outputs 123
barInt = 354;
Console.WriteLine(barInt); //Outputs 354
}
}
public class Foo
{
public ref int GetInt()
{
// int x = 123;
// return ref x; //CS8168
var bar = new Bar(123);
return ref bar.Value;
}
class Bar
{
public Bar(int v)
{
Value = v;
}
public …Run Code Online (Sandbox Code Playgroud)