Delphi-équivalent de l'opérateur ternaire de C#? [dupliquer]

possibilité de dupliquer:

y a-t-il, ou y aura-t-il un opérateur conditionnel à Delphi?

je comprends que Delphi n'a pas l'opérateur ternaire comme dans C#. c'est-à-dire ?:

alors comment représenter au mieux cette fonction Appel? Quel est la méthode la plus sûre?

serait très agréable s'il y a y a-t-il un code qui peut être utilisé au lieu d'écrire une fonction séparée? Dans la négative, Quelle est la représentation de code la plus efficace et/ou la plus nette?

22
demandé sur Community 2011-03-09 09:01:41

3 réponses

bien sûr que vous pouvez utiliser

IfThen(SomeBooleanExpression, IfTrueReturnValue, IfFalseReturnValue)

où les valeurs de retour sont numériques ( uses Math ) ou chaîne ( uses StrUtils ). Mais notez que ceci évaluera les deux arguments dans tous les cas -- il n'y a pas d'évaluation paresseuse, donc ce n'est pas aussi efficace que l'opérateur ?: en C#, où seul l'opérande droit est évalué.

Si vous ne pouvez pas faire

y := IfThen(x <> 0, 1/x, 0)

La meilleure chose est de s'en tenir à un ordinaire

if x <> 0 then y := 1/x else y := 0;
37
répondu Andreas Rejbrand 2011-03-09 06:14:27

la plus proche est:

if (condition) then <staement> else <statement>;

J'espère que ça aidera. Pour autant que je me souvienne, il n'y a pas d'opérateur à Delphi.

3
répondu Unmanned Player 2011-03-09 06:15:17

Essayez le Forum de Jedi:

function Iff(const Condition: Boolean; const TruePart: string; const FalsePart: string): string; overload;
function Iff(const Condition: Boolean; const TruePart: Char; const FalsePart: Char): Char; overload;
function Iff(const Condition: Boolean; const TruePart: Byte; const FalsePart: Byte): Byte; overload;
function Iff(const Condition: Boolean; const TruePart: Integer; const FalsePart: Integer): Integer; overload;
function Iff(const Condition: Boolean; const TruePart: Cardinal; const FalsePart: Cardinal): Cardinal; overload;
function Iff(const Condition: Boolean; const TruePart: Float; const FalsePart: Float): Float; overload;
function Iff(const Condition: Boolean; const TruePart: Boolean; const FalsePart: Boolean): Boolean; overload;
function Iff(const Condition: Boolean; const TruePart: Pointer; const FalsePart: Pointer): Pointer; overload;
function Iff(const Condition: Boolean; const TruePart: Int64; const FalsePart: Int64): Int64; overload;
function Iff(const Condition: Boolean; const TruePart: Variant; const FalsePart: Variant): Variant; overload;
2
répondu CloudyMarble 2011-03-09 06:18:00