属性 上的 C# 7 Ref return 无法编译

C# 7 Ref return on a property doesn't compile

在学习 c# 7 时,我偶然发现了 Ref return。下面的 GetSingle 方法有效,因为我了解到 return 我是外部参考。但是 GetIns 方法抛出一个编译时错误。不幸的是,我无法弄清楚这些 GetInsGetSingle 不同的原因和方式。有人可以解释一下吗?

错误:不能在此上下文中使用表达式,因为它可能不是 return 引用。

请注意,其中一条评论建议将其作为重复项。但那个问题是集合的类型,这特别是在集合成员和类型中的 属性 之间。因此我认为这是一个不同的问题

 class Pro
    {
        static void Main()
        {
            var x = GetSingle(new int[] { 1, 2 });
            Console.WriteLine(x);
        }
        static ref int GetSingle(int[] collection)
        {
            if (collection.Length > 0) return ref collection[0];
            throw new IndexOutOfRangeException("Collection Parameter!");
        }
        static ref int GetIns(Shape s)
        {
            if (s.Area <= 0)
            {
                s.Area = 200;
                return ref s.Area;
            }
            return ref s.Area;
        }
        struct Shape {public int Area{ get; set; }
    }

发生这种情况是因为 Shape 有一个 属性 Area 而不是 public int 字段成员。您不能 return 引用属性。

这不会编译:

class Shape
{
  private int mArea;

  public int Area => mArea;
}

static ref int GetIns(Shape s)
{
  if (s.Area <= 0)
  {
    s.Area = 200;
    return ref s.Area;
  }
  return ref s.Area;
}

但这将:

class Shape
{
  public int Area;
}

static ref int GetIns(Shape s)
{
  if (s.Area <= 0)
  {
    s.Area = 200;
    return ref s.Area;
  }
  return ref s.Area;
}