我有一个:
private bool[][] field
{
get { return allfields[allfields.Count - 1]; }
set { allfields.Add(value); generation++; }
}
和a:
if (field[x][y])
{
field[x][y] = false;
}
else
{
field[x][y] = true;
}
if-clause似乎工作正常但是在设置时没有以任何方式调用setter ......是否有任何关于如何解决这个问题的想法(例如更好的setter)或至少是这个问题的原因?< / p>
感谢您的帮助
P.S。:
field = nextfield.Clone() as bool[][];
正在调用setter ......
答案 0 :(得分:3)
更好的方法是使用Indexer属性作为数组的公共访问器
class BoolArray
{
public bool this[int raw, int column]
{
get
{
// access internal jugged array
if (_data[raw] == null)
{
return false;
}
return _data[raw][column];
}
set
{
if (_data[raw] == null)
{
_data[raw] = new bool[Columns];
}
_data[raw][column] = value;
}
}
// Using a jugged array as storage
private bool _data[][];
...
}
答案 1 :(得分:-1)
实际上,您正在调用getter来返回bool[][]
的实例,然后通过索引(=
运算符)分配(使用[]
运算符)数组中的值。
然后,只有当您在assign运算符的左侧部分使用field
而不在[]
运算符中使用具有更高优先级且称为earler的<{p>}时,才会调用setter。
然后在field[x][y] = false;
字符串中我们有下一个优先级:
[]
运营商[]
运营商=
运营商在field = nextfield.Clone() as bool[][];
行,我们有下一个优先级:
.
运营商()
运营商as
运营商=
运营商