Индексаторы C# с Ref Return Получает также поддержку множеств

Я делаю что-то здесь не так, или в 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, но позволить индексатору также поддерживать Set?

1 ответ

Как правильно указал @IvanStoev, нет необходимости устанавливать, так как значение возвращается по ссылке. Поэтому вызывающая сторона индексатора имеет полный контроль над возвращаемым значением и может поэтому присвоить ему новое значение, при этом изменения будут отражены в базовой структуре данных (чей индексатор вызывался), так как значение было возвращено по ссылке, а не по значение.

Другие вопросы по тегам