![]() |
Delphi-Version: 10.2 Tokyo
Generic Collections als Funktionsübergabe
Ich erstelle eine Liste mit Records und möchte in einer Funtkion einen Teilauschnitt davon in eine neue Liste übetragen.
Der Funktion übergebe ich als Parameter die komplette Liste und möchte die Teilliste als Funtkionsergebnis zurückbekommen. Ich lösche die Teilliste bei Funktionseintritt. Aber bereits da bekomme ich auf die Nase mit einer Zugriffsverletzung. Ich verstehe nicht warum. Ich dachte bisher, in einer Funktion könnte ich den Funtionsparameter verändern. Was mache ich falsch ? oder wie muss die Funtkion aussehen. Mit "einfachen" Variablen wie String oder Integer funtkioniert das doch. Danke und Gruße Karl
Code:
unit Main;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.Generics.Collections; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; type test = record feld1: Shortstring; feld2: Shortstring; feld3: Shortstring; end; ListeRecords = TList<test>; implementation {$R *.dfm} function Stripped_Liste(Liste: ListeRecords; Stadt: string): ListeRecords; var i: integer; test_rec: test; begin result.Clear; for i := 0 to Liste.count - 1 do begin test_rec := Liste.Items[i]; if test_rec.feld3 = Stadt then result.Add(test_rec); end; end; procedure TForm1.Button1Click(Sender: TObject); var i: integer; testrec: test; RecordListe: ListeRecords; LocalListe: ListeRecords; begin RecordListe.Create; RecordListe.Clear; testrec.feld1 := 'Walter'; testrec.feld2 := 'Müller'; testrec.feld3 := 'Berlin'; RecordListe.Add(testrec); testrec.feld1 := 'Manfred'; testrec.feld2 := 'Bauer'; testrec.feld3 := 'Weimar'; RecordListe.Add(testrec); LocalListe.Create; LocalListe := Stripped_Liste(RecordListe, 'Berlin'); end; |
AW: Generic Collections als Funktionsübergabe
Das übliche: Klassen-Instanzen werden über den Konstruktor-Aufruf
Delphi-Quellcode:
erzeugt und nicht über
<Variable> := <KlassenTyp>.<Konstruktor>
Delphi-Quellcode:
.
<Variable>.<Konstruktor>
Delphi-Quellcode:
Desweiteren;
RecordListe.Create; // falsch!
RecordListe := ListeRecords.Create; // richtig
Delphi-Quellcode:
und in der Function Stripped_Liste:
LocalListe.Create; // ist nicht nur falsch, sondern kann ganz weg,
// da die Variable in der folgenden Zeile ja wieder überschrieben wird
Delphi-Quellcode:
result.Clear; //falsch!
result := ListeRecords.Create; // richtig |
AW: Generic Collections als Funktionsübergabe
Danke :-)
Gruß Karl |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz