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