具有Ref Return的C#Indexers获取也支持集

时间:2018-03-21 07:12:34

标签: ref indexer c#-7.2

我在这里做错了什么,或者从C#7.2开始,不支持ref和allow set返回的索引器?

使用:

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

也适用:

public byte this[int index] {
  get {
      return bytes[index];
  }
  set {
    bytes[index] = value;
  }
}

失败:

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;
  }
}

也会失败:

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;
  }
}

那么,有没有办法获得ref ref还允许索引器也支持Set?

1 个答案:

答案 0 :(得分:0)

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