문제

델파이 프리즘을 배우고 있으며 다음 코드를 작성하는 방법을 찾지 못합니다.

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;

그런 다음 어딘가에 항목을 배열에 넣으려고합니다.

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

하지만 작동하지 않습니다 .. 누군가 나를 깨달을 수 있습니까?

감사!

도움이 되었습니까?

해결책

  • 당신은 "작동하지 않았다"는 것을 정확히 지정하지 않았습니다. 이와 같은 질문에 오류를 포함해야합니다.
  • 배열은 참조 유형이며 값으로 시작합니다. nil. 요소에 액세스하기 전에 초기화해야합니다.

당신은 이것을 할 수 있습니다 new 운영자:

rapport.Categories = new TRapportCategorie[10]; // 0..9
  • 배열은 상당히 낮은 수준 유형입니다. 일반적으로 함께 일하는 것이 좋습니다 List<T> 대신에.

그래서 당신은 다음을 선언합니다 :

Categories: List<TRapportCategorie>;
  • 그러나 목록은 또한 초기화가 필요합니다 new 운영자. 또한 값 유형이 포함 된 목록에서 인덱서의 리턴 값을 수정하면 원본이 아닌 사본을 수정하여 다음 지점으로 이어집니다.
  • 레코드는 일반적으로 참조 유형이 아니기 때문에 데이터를 나타내는 데 가장 적합한 데이터 유형이 아닙니다. 원래 데이터가 아닌 데이터 사본을 수정하는 것은 매우 쉽습니다. 대신 클래스를 사용하는 것이 가장 좋습니다. 여기서 모든 초기화 코드 (예 : 배열 또는 목록을 할당 함)를 생성자에 넣을 수 있습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top