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