Pregunta

Estoy aprendiendo Delphi Prism, y no encuentro la forma de escribir el siguiente código con ella:

type
  TRapportItem = record
   Label : String;
   Value : Int16;
   AnomalieComment : String;
  end;

type 
  TRapportCategorie = record
    Label : String;
    CategoriesItems : Array of TRapportItem;
  end;

type 
  TRapportContent = record
    Categories : array of TRapportCategorie;
  end;

Entonces, en algún lugar, trato de poner elementos de la matriz:

rapport.Categories[i].Label:=l.Item(i).InnerText;

Pero no funciona .. ¿Puede alguien enlight?

Gracias!

¿Fue útil?

Solución

  • No ha especificado exactamente lo que "no funcionó". Debe incluir el error en este tipo de preguntas.
  • Las matrices son los tipos de referencia, y que comienzan con el valor nil. Tienen que ser inicializado para poder acceder a los elementos.

Puede hacer esto con el operador new:

rapport.Categories = new TRapportCategorie[10]; // 0..9
  • Las matrices son bastante un tipo de bajo nivel. Por lo general es mejor trabajar con List<T> lugar.

Así que será declara:

Categories: List<TRapportCategorie>;
  • Pero las listas también tienen que inicializar, usando el operador new. Además, la modificación del valor de retorno del indizador en una lista que contiene un tipo de valor será la modificación de una copia, no el original, lo que lleva al siguiente punto.
  • Records por lo general no son el mejor tipo de datos para representar los datos, ya que no están Referencia tipos; es muy fácil acabar modificando una copia de los datos, en lugar de los datos originales. Por lo general es mejor utilizar clases en lugar, donde se puede poner todo el código de inicialización (como la asignación de la matriz o lista) en el constructor.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top