我想正确处理数组的getter和setter中的索引(不是异常处理程序),就像这样(这不起作用):
byte[] Board {
get {
if (index >= 0 && index < Board.Length)
return Board[index];
else
return 3;
}
set {
if (index >= 0 && index < Board.Length)
Board[index] = value;
}
}
这样,例如Board[1]
返回Board [1]的内容,Board[-1]
返回3.
这样做的正确方法是什么?
答案 0 :(得分:3)
你不能用setter和getter来做到这一点。
解决方法是创建一个名为Array<T>
的数组包装类。添加T[]
类型的字段作为&#34;支持字段&#34;。然后实现T[]
的所有成员,例如Length
或IEnumerable<T>
接口。例如,
class Array<T> {
T[] _array;
public int Length => _array.Length;
public Array(int length) {
_array = new T[length];
}
}
这是重要的部分,您现在可以为数组包装器添加索引器:
public T this[int index] {
get {
if (index >= 0 && index < _array.Length) {
return _array[index];
} else {
return 3;
}
}
set {
if (index >= 0 && index < _array.Length) {
_array[index] = value;
}
}
}
然后,您可以使用Array<byte>
作为董事会的类型。
答案 1 :(得分:1)
在C#中,属性只能获取/设置&#34;自己&#34;。这意味着如果你有一个数组,你只能获取/设置数组本身,而不是单个值。但是,您可以创建以您想要的方式查找和操作的方法:
public byte getBoardValue(int index) {
if (index >= 0 && index < Board.Length)
return _board[index];
else
return 3;
}
public void setBoardValue(int index, byte value) {
if (index >= 0 && index < Board.Length)
_board[index] = value;
}