Domanda

Sto imparando Delphi Prism, e io non trovare il modo di scrivere il seguente codice con esso:

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;

Poi, da qualche parte, cerco di inserire gli elementi nella matrice:

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

Ma non funziona .. Qualcuno mi può illuminare?

Grazie!

È stato utile?

Soluzione

  • Lei non ha specificato esattamente ciò che "non ha funzionato". È necessario includere l'errore in questioni come questa.
  • Gli array sono tipi di riferimento, e cominciano con la nil valore. Hanno bisogno di essere inizializzato prima che gli elementi sono accessibili.

È possibile farlo con l'operatore new:

rapport.Categories = new TRapportCategorie[10]; // 0..9
  • Gli array sono un certo tipo di basso livello. Di solito è meglio lavorare con List<T> invece.

Quindi, ci si dichiara:

Categories: List<TRapportCategorie>;
  • ma elenca anche bisogno di inizializzazione, utilizzando l'operatore new. Inoltre, modificando il valore restituito dell'indicizzatore in un elenco che contiene un tipo di valore sarà modifica di una copia, non l'originale, che porta al punto successivo.
  • Dati di solito non sono il miglior tipo di dati per la rappresentazione dei dati, in quanto non sono riferimento tipi; è molto facile finire la modifica di una copia dei dati, piuttosto che i dati originali. Di solito è meglio usare classi invece, dove si può mettere tutto il codice di inizializzazione (come ad esempio l'assegnazione della matrice o lista) nel costruttore.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top