![]() |
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 ![]() 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
![]() aber eventuell reicht auch ![]()
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 10:55 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 by Thomas Breitkreuz