Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi [gelöst] integer <> integer bei TObjectList.Last? (https://www.delphipraxis.net/178651-%5Bgeloest%5D-integer-integer-bei-tobjectlist-last.html)

silver-moon-2000 19. Jan 2014 18:29

Delphi-Version: XE

[gelöst] integer <> integer bei TObjectList.Last?
 
Hallo und Entschuldigung für den kryptischen Titel, mir ist nichts Besseres eingefallen.

Vielleicht gibt es eine einfache Lösung für meine Problem, vielleicht bin ich auch momentan nur blind?

Ich versuche, mittels TryStrToInt einen string in einen integer zu wandeln
Delphi-Quellcode:
const
  ITEMSHEET_COLUMN_ITEMID = 1;
var
  id, startRow, row : Integer;
[...]
FItems.Add(TItemPriceInfo.Create);
TryStrToInt(_data[startRow + row, ITEMSHEET_COLUMN_ITEMID - 1], id); //<-----
FItems.Last.itemID := id;//<-----
funktioniert auch wunderbar. Das hier
Delphi-Quellcode:
TryStrToInt(_data[startRow + row, ITEMSHEET_COLUMN_ITEMID - 1], FItems.Last.itemID); //<-----
aber wirft mir einen Fehler um die Ohren!

Dabei habe ich verwendet:
Delphi-Quellcode:
type TItemPriceInfo = class(TObject)
  private
    FItemID        : Integer;
    [...]
  public
    [...]
    property itemID        : Integer           read FItemID        write FItemID;
end;


type TStringMatrix = array of array of string;
var _data : TStringMatrix;


FItems : TObjectList<TItemPriceInfo>;
Der Fehler lautet:
Zitat:

E2250 There is no overloaded version of 'TryStrToInt' that can be called with these arguments
Und das wundert mich doch ein wenig.
Die Umwandlung über eine Zwischenvariable klappt, die direkte Zuweisung nicht...

kann mir das einer erklären? Was habe ich übersehen?

jaenicke 19. Jan 2014 18:34

AW: integer <> integer bei TObjectList.Last?
 
Der letzte Parameter ist ein var-Parameter. Da kannst du nur eine Variable und keine Property angeben.

himitsu 19. Jan 2014 18:47

AW: integer <> integer bei TObjectList.Last?
 
Stell dir vor, als wenn Property immer einen Getter und Setter hätten und schon fällt einem auf, warum man dieses nicht als Var-Parameter nutzen kann.

Wenn du an der Stelle auf das interne
Delphi-Quellcode:
FItems.Last.FItemID
Zugriff hast, dann würde es funktionieren.


Und warum verwendest du eigentlich TryStrToInt, wenn du den Rückgabewert nichtmal benutzt?
Da kannst du auch gleich StrToIntDef verwenden und hättest da im Fehlerfall wenigstens keinen Zufallswert.
Außerdem kannst du das direkt an dein Property übergeben (genauer würde es direkt an den Setter weitergeleitet).

silver-moon-2000 19. Jan 2014 19:17

AW: integer <> integer bei TObjectList.Last?
 
Zitat:

Zitat von jaenicke (Beitrag 1244421)
Der letzte Parameter ist ein var-Parameter. Da kannst du nur eine Variable und keine Property angeben.

Zitat:

Zitat von himitsu (Beitrag 1244430)
Stell dir vor, als wenn Property immer einen Getter und Setter hätten und schon fällt einem auf, warum man dieses nicht als Var-Parameter nutzen kann.

Wenn du an der Stelle auf das interne
Delphi-Quellcode:
FItems.Last.FItemID
Zugriff hast, dann würde es funktionieren.

Ah, jetzt ja, eine Insel [im Meer des Unverständnisses]. Verstanden, danke.

Zitat:

Zitat von himitsu (Beitrag 1244430)
Und warum verwendest du eigentlich TryStrToInt, wenn du den Rückgabewert nichtmal benutzt?
Da kannst du auch gleich StrToIntDef verwenden und hättest da im Fehlerfall wenigstens keinen Zufallswert.
Außerdem kannst du das direkt an dein Property übergeben (genauer würde es direkt an den Setter weitergeleitet).

Die Zufallswerte hatte ich schon ausgeschlossen über:
Delphi-Quellcode:
id := -1;
TryStrToInt(..., id);
Fitems.Last.FItemID := id;
Dass es da
Delphi-Quellcode:
StrToIntDef
gibt, habe ich irgendwie ganz vergessen. Danke für die Erinnerung.

himitsu 19. Jan 2014 19:30

AW: integer <> integer bei TObjectList.Last?
 
Dann verlässt du dich aber auf die Implementierung vom TryStrToInt, welcher auch bei einem Fehler 'ne halbe Zahl im Result haben könnte.

Das Result solcher Funktionen besagt grundsätzlich erstmal nur, daß bei TRUE der Rückgabewert "gültig" ist.
Ob bei FALSE der Wert unverändert oder sonstwas enthält, ist nicht definiert.

Zitat:

Delphi-Quellcode:
id := -1;
TryStrToInt(..., id);

Also doch StrToIntDef :roll:

Delphi-Quellcode:
FItems.Last.ItemID := StrToIntDef(..., -1);


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz