我希望正确地处理数组的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]返回Board1的内容,Board[-1]返回3。
这样做的正确方法是什么?
发布于 2018-01-28 10:30:02
在C#中,属性只能获取/设置“自身”。这意味着,如果您有一个数组,您只能获得/设置数组本身,而不是单个值。但是,您可以创建如下所需的外观和行为方式的方法:
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;
}发布于 2018-01-28 10:29:26
您不能用setter和getter来实现这一点。
解决方法是创建一个名为Array<T>的数组包装器类。添加一个类型为T[]的字段作为“支持字段”。然后实现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>作为您的董事会类型。
https://stackoverflow.com/questions/48485230
复制相似问题