c# 交错数组 getter 和 setter
c# jagged array getter and setter
我有一个:
private bool[][] field
{
get { return allfields[allfields.Count - 1]; }
set { allfields.Add(value); generation++; }
}
还有一个:
if (field[x][y])
{
field[x][y] = false;
}
else
{
field[x][y] = true;
}
if 子句似乎工作正常但 setter 在设置时没有以任何方式调用...有没有解决这个问题的想法(例如更好的 setter)或者至少是这个问题的原因?
感谢帮助
P.S.:
field = nextfield.Clone() as bool[][];
正在调用 setter...
实际上你正在调用 getter 到 return bool[][]
的一个实例,然后通过索引 ([]
运算符).
只有在赋值运算符的左侧使用 field
而不是在 []
具有更高优先级并称为 earler 的运算符中才调用 setter。
然后在 field[x][y] = false;
字符串中我们有下一个优先级:
- 属性 getter
- 第一个
[]
运算符
- 第二个
[]
运算符
=
运算符
在 field = nextfield.Clone() as bool[][];
行中,我们有下一个优先级:
.
运算符
()
运算符
as
运算符
=
运算符
- 属性 setter
更好的方法是使用 Indexer 属性 作为数组的 public 访问器
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[][];
...
}
我有一个:
private bool[][] field
{
get { return allfields[allfields.Count - 1]; }
set { allfields.Add(value); generation++; }
}
还有一个:
if (field[x][y])
{
field[x][y] = false;
}
else
{
field[x][y] = true;
}
if 子句似乎工作正常但 setter 在设置时没有以任何方式调用...有没有解决这个问题的想法(例如更好的 setter)或者至少是这个问题的原因?
感谢帮助
P.S.:
field = nextfield.Clone() as bool[][];
正在调用 setter...
实际上你正在调用 getter 到 return bool[][]
的一个实例,然后通过索引 ([]
运算符).
只有在赋值运算符的左侧使用 field
而不是在 []
具有更高优先级并称为 earler 的运算符中才调用 setter。
然后在 field[x][y] = false;
字符串中我们有下一个优先级:
- 属性 getter
- 第一个
[]
运算符 - 第二个
[]
运算符 =
运算符
在 field = nextfield.Clone() as bool[][];
行中,我们有下一个优先级:
.
运算符()
运算符as
运算符=
运算符- 属性 setter
更好的方法是使用 Indexer 属性 作为数组的 public 访问器
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[][];
...
}