2009-10-04 1 views
0

는 델파이 프리즘을 배우고, 나는 그것을 다음과 같은 코드를 작성하는 방법을 찾을 수 없습니다 :Delphi -> Delphi 프리즘, 레코드 배열 사용 방법

rapport.Categories[i].Label:=l.Item(i).InnerText; 
: 어딘가에, 내가 배열에 항목을 넣어하려고 그런

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; 

하지만 작동하지 않습니다 .. 누군가가 나를 화나게 할 수 있습니까?

감사합니다.

+0

'rapport'변수를 선언하고 초기화하는 코드를 표시 할 수 있습니까? – mjv

+0

'rapport : TRapportContent;'만 추가했습니다. 인터페이스의 보호 된 부분에 연결합니다. 내가 뭐 놓친 거 없니? 또한 CategoriesItems를 TRapportItem의 Array [0..64]로 선언하려고했습니다. 하지만 나는 똑같은 문제가 있었다. 너무 빨리 답장 해 주셔서 감사합니다. –

+0

나는 어제 만든 또 다른 테스트를 발견 : '정규'델파이를 사용하여 내가 setlength (rapport.Categories, 10) 쓸 수 있습니다; 동적으로 내 배열을 선언 할 때,하지만 프리즘을 사용하여 동일한 작성하는 방법을 찾을 수 없습니다. –

답변

5
  • 정확히 "작동하지 않음"을 지정하지 않았습니다. 이와 같은 질문에 오류를 포함시켜야합니다.
  • 배열은 참조 유형이며 값은 nil부터 시작합니다. 요소에 액세스하려면 먼저 초기화해야합니다.

당신은 new 연산자를 사용하여이 작업을 수행 할 수 있습니다

rapport.Categories = new TRapportCategorie[10]; // 0..9 
  • 배열은 매우 낮은 수준의 유형입니다. 보통 대신 List<T>을 사용하는 것이 좋습니다.

그래서 당신은 선언 할 것 :

Categories: List<TRapportCategorie>; 
  • 그러나 목록도 new 연산자를 사용하여 초기화해야합니다. 또한 값 유형을 포함하는 목록에서 인덱서의 반환 값을 수정하면 원본이 아닌 복사본이 수정되므로 다음 지점으로 연결됩니다.
  • 레코드는 일반적으로 참조 형식이 아니기 때문에 데이터를 나타내는 데 가장 적합한 데이터 형식이 아닙니다. 원본 데이터보다는 데이터 사본을 수정하는 것이 매우 쉽습니다. 일반적으로 대신 클래스를 사용하여 생성자에 모든 초기화 코드 (예 : 배열 또는 목록 할당)를 넣을 수 있습니다.
+0

감사합니다. 나는리스트의 사용으로 바꾸었고 이제는 작동한다! rapport.Categories : = 새 목록 ; 이 코드는 두 가지 다른 응용 프로그램에서 사용해야하기 때문에 일종의 classe 사용이 계획되었지만 빠른 프로토 타이핑을 원했습니다. 감사합니다. –

+0

+1 목록을 사용하거나 키를 카테고리 이름으로 사용하는 사전 을 대신 사용하십시오. – jamiei