c #jagged array getter和setter

时间:2016-01-29 09:45:42

标签: c# setter getter getter-setter

我有一个:

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 ......

2 个答案:

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

  1. 物业获取者
  2. 第一个[]运营商
  3. 第二个[]运营商
  4. =运营商
  5. field = nextfield.Clone() as bool[][];行,我们有下一个优先级:

    1. .运营商
    2. ()运营商
    3. as运营商
    4. =运营商
    5. property setter