具有引用返回 Get 的 C# 索引器也支持集

Fit*_*Dev 6 indexer ref c#-7.2

我在这里做错了什么,或者从 C# 7.2 开始,不支持通过 ref 返回和允许设置的索引器?

作品:

public ref byte this[int index] {
  get {
      return ref bytes[index];
  }
}
Run Code Online (Sandbox Code Playgroud)

也有效:

public byte this[int index] {
  get {
      return bytes[index];
  }
  set {
    bytes[index] = value;
  }
}
Run Code Online (Sandbox Code Playgroud)

失败:

public ref byte this[int index] {
  get {
      return ref bytes[index];
  }
  set { //<-- CS8147 Properties which return by reference cannot have set accessors
    bytes[index] = value;
  }
}
Run Code Online (Sandbox Code Playgroud)

也失败:

public ref byte this[int index] {
  get {
      return ref bytes[index];
  }
}

public byte this[int index] { //<-- CS0111 Type already defines a member called 'this' with the same parameter types
  set {
    bytes[index] = value;
  }
}
Run Code Online (Sandbox Code Playgroud)

那么,有没有办法让 ref 返回同时让索引器也支持 Set 呢?

Fit*_*Dev 3

正如@IvanStoev 正确指出的那样,不需要设置,因为该值是通过引用返回的。因此,索引器的调用者可以完全控制返回的值,因此可以为其分配一个新值,并且更改反映在底层数据结构(其索引器被调用)中,因为该值是通过引用返回的,而不是通过价值。