Delphi-Version: XE2
Der in Operator
Hi zusammen,
ich wollte gerade ein
Delphi-Quellcode:
verwenden, um ein längliches
in
Delphi-Quellcode:
zu verkürzen.
if
Aus:
Delphi-Quellcode:
sollte ein hübsches:
if (messwert.WerteDefID = wdPH.No) or (messwert.WerteDefID = wdBE.No) then
Delphi-Quellcode:
werden.
if messwert.WerteDefID in [wdPH.No, wdBE.No] then
Verglichen werden hier allesamt Integer. Es kompiliert auch brav. Nur zur Laufzeit ist das immer false, obwohl ich im Debugger sehe, daß eine Übereinstimmung vorliegt. Aus diesem SO-Beitrag http://stackoverflow.com/questions/9...operator-usage lese ich heraus, daß das irgendwie nur mit "kleinen" (Byte-) Werten gehen soll, ich habe aber eine Übereinstimmung mit einem Wert von 1743...liegt es daran? Oder mache ich etwas grundsätzlich falsch. Sherlock |
AW: Der in Operator
Der in-Operator agiert nur mit Sets und Sets sind auf 0..255 beschränkt.
Der Compiler führt beim Aufbau der Sets einen impliziten Cast auf Byte aus. Hast du die Überlaufprüfung aktiv? Die sollte da eigentlich zur Laufzeit anspringen. |
AW: Der in Operator
Haha, Danke, genau die Überlaufprüfung ist aus ;)
Schade aber, weil eigentlich könnte man damit reichlich Eleganz und Übersichtlichkeit produzieren. Vielleicht gibt es aber sogar eine Warnung dazu? Sherlock |
AW: Der in Operator
Was spricht gegen diese elegante Möglichkeit?
Delphi-Quellcode:
case messwert.WerteDefID of
wdPH.No, wdBE.No : begin end; end; |
AW: Der in Operator
Im Grunde brauchst du eine Funktion ala MatchStr (Welche es aber nicht im Delphi gibt ... k.A. warum),
aber eventuell reicht auch InRange.
Delphi-Quellcode:
Aber den CASE-Trick verwende ich da auch öfters.
function MatchInt(AInt: Integer; const AValues: array of Integer): Boolean;
if MatchInt(messwert.WerteDefID, [wdPH.No, wdBE.No]) then Bei Werten zwischen 0 und 65535 könnte man eventuell auch die Unicode-Funktionen misbrauchen aber in der Unit Character finde ich leider keine passende Funktion. 0..255 => Rate mal, warum IN nicht mehr beim Char (TSysCharSet) geht und Delphi seit 2009 eine Warnung wirft. :zwinker: |
AW: Der in Operator
Ja, das case verwende ich jetzt auch. :)
Auf andere "üble" Tricks will ich lieber im Sinne der Lesbarkeit verzichten ;) Sherlock |
AW: Der in Operator
Seit wann nochmal ist
Delphi-Quellcode:
das neue
case of
Delphi-Quellcode:
?:gruebel:
with
|
AW: Der in Operator
Neee, das kannste jetzt aber echt nicht vergleichen!
Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:39 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