델파이 -> 델파이 프리즘, 레코드 배열을 사용하는 방법은 무엇입니까?
-
19-09-2019 - |
문제
델파이 프리즘을 배우고 있으며 다음 코드를 작성하는 방법을 찾지 못합니다.
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
운영자. 또한 값 유형이 포함 된 목록에서 인덱서의 리턴 값을 수정하면 원본이 아닌 사본을 수정하여 다음 지점으로 이어집니다. - 레코드는 일반적으로 참조 유형이 아니기 때문에 데이터를 나타내는 데 가장 적합한 데이터 유형이 아닙니다. 원래 데이터가 아닌 데이터 사본을 수정하는 것은 매우 쉽습니다. 대신 클래스를 사용하는 것이 가장 좋습니다. 여기서 모든 초기화 코드 (예 : 배열 또는 목록을 할당 함)를 생성자에 넣을 수 있습니다.
제휴하지 않습니다 StackOverflow