Tengo un:

private bool[][] field
{
    get { return allfields[allfields.Count - 1]; }
    set { allfields.Add(value); generation++; }
}

Y un:

if (field[x][y])
{
    field[x][y] = false;
}
else
{
    field[x][y] = true;
}

La cláusula if parece estar funcionando correctamente, pero el establecedor no se llama de ninguna manera mientras se configura ... ¿Hay alguna idea de cómo resolver esto (por ejemplo, mejor establecedor) o al menos una razón para este problema?

Gracias por la ayuda

PD.:

field = nextfield.Clone() as bool[][];

Está llamando al colocador ...

1
pytomaniaq 29 ene. 2016 a las 12:45

2 respuestas

La mejor respuesta

Un mejor enfoque es usar la propiedad Indexer como un acceso público a la matriz

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[][];
   ...
}
3
alexm 29 ene. 2016 a las 10:07

En realidad, está llamando a getter para que devuelva una instancia de bool[][] y luego asigne (con el operador =) el valor en la matriz por índice (operador []).

Luego, llama al setter solo si está usando field en la parte izquierda de asignar operador pero no en el operador [] que tiene más prioridad y se llama earler.

Luego, en la cadena field[x][y] = false; tenemos la siguiente prioridad:

  1. Captador de propiedades
  2. Primera operadora [] Primer operador []
  3. Segunda operadora [] Segundo operador []
  4. Operadora = Operador =

Y en la línea field = nextfield.Clone() as bool[][]; tenemos la siguiente prioridad:

  1. Operadora . Operador .
  2. Operadora () Operador ()
  3. Operadora as Operador as
  4. Operadora = Operador =
  5. establecedor de propiedad
-1
Vadim Martynov 29 ene. 2016 a las 09:51