Delphi -> Delphi Prism, cómo usar una matriz de registros?
-
19-09-2019 - |
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!
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