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; 字符串中我们有下一个优先级:

  1. 属性 getter
  2. 第一个[]运算符
  3. 第二个 [] 运算符
  4. = 运算符

field = nextfield.Clone() as bool[][]; 行中,我们有下一个优先级:

  1. . 运算符
  2. () 运算符
  3. as 运算符
  4. = 运算符
  5. 属性 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[][];
   ...
}