Индексаторы 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, нет необходимости устанавливать, так как значение возвращается по ссылке. Поэтому вызывающая сторона индексатора имеет полный контроль над возвращаемым значением и может поэтому присвоить ему новое значение, при этом изменения будут отражены в базовой структуре данных (чей индексатор вызывался), так как значение было возвращено по ссылке, а не по значение.