可能重复:
Is there, or is there ever going to be, a conditional operator in Delphi?
我理解Delphi没有C#中的三元运算符。
即?:
那么如何最好地表示这个函数调用?什么是最干净的方法?
如果有任何代码可以使用INSTEAD编写单独的函数,那将是非常好的吗?如果没有,那么最有效和/或最干净的代码表示是什么?
答案 0 :(得分:39)
当然可以使用
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;
答案 1 :(得分:4)
离三元运算符最近的是:
if (condition) then <statement> else <statement>;
据我记忆,Delphi中没有三元运算符。
答案 2 :(得分: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;