Delphi - 相当于C#的三元运算符? [重复]

问题描述 投票:24回答:3

可能重复: Is there, or is there ever going to be, a conditional operator in Delphi?

我知道Delphi没有C#中的三元运算符。即?:

那么如何最好地表示这个函数调用?什么是最干净的方法?

如果有任何代码可以使用INSTEAD编写单独的函数,那将是非常好的吗?如果没有,那么最有效和/或最干净的代码表示是什么?

delphi operators ternary-operator
3个回答
40
投票

当然可以使用

IfThen(SomeBooleanExpression, IfTrueReturnValue, IfFalseReturnValue)

返回值是数字(uses Math)或字符串(uses StrUtils)。但请注意,这将在所有情况下评估两个参数 - 没有惰性求值,因此它不如C#中的?:运算符有效,其中只评估正确的操作数。

所以你做不到

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

最好的事情就是坚持平凡

if x <> 0 then y := 1/x else y := 0;

4
投票

最接近三元运算符的是:

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

据我记忆,Delphi中没有三元运算符。


2
投票

试试绝地的Iff:

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;
© www.soinside.com 2019 - 2024. All rights reserved.