我几乎在所有项目中都多次使用过这种情况,当我进行某种数据转换时,当涉及到布尔值时,我觉得在简单化方面有点迷失。下面的陈述就像我的代码中的一个痛苦的拇指一样:
if BoolVal then
StrVal:= 'True'
else
StrVal:= 'False';
我想知道是否有更简单的方法来执行此评估?也许使用我不知道的Case
语句?我的实际实现比StrVal
更复杂,但它确实包括返回两个不同的值,具体取决于它是True还是False。例如,这里有一些真正的代码......
if fsBold in Can.Font.Style then
ConvertTo(AddSomeOtherText + 'True')
else
ConvertTo(AddSomeOtherText + 'False');
这只是为了强调我希望有多简单。我想知道我是否可以按照以下方式做点什么:
ConvertTo(AddSomeOtherText + BoolToStrCase((fsBold in Can.Font.Style), 'True', 'False'));
我确信这不是一个真正的命令,但我在一条线上寻找那种简单。
答案 0 :(得分:40)
在单位StrUtils
中,有ifthen()
StrVal := IfThen(BoolVal,'True','False');
对于这种特殊情况,您甚至可以使用:
StrVal := BoolToStr(BoolVal);
答案 1 :(得分:23)
Ow com'on没有人听说过boolean索引的数组?
const
BOOL_TEXT: array[boolean] of string = ('False', 'True');
YES_NO_TEXT: array[boolean] of string = ('No', 'Yes');
ERROR_OR_WARNING_TEXT: array[boolean] of string = ('Warning', 'Error');
事实上,这是BoolToStr本身所使用的!
function BoolToStr(B: Boolean; UseBoolStrs: Boolean = False): string;
const
cSimpleBoolStrs: array [boolean] of String = ('0', '-1');
答案 2 :(得分:7)
为了将Boolean转换为字符串,有BoolToStr,它至少从Delphi 2007开始就存在。您可以在上一个示例中使用它,如下所示:
TextVal := BoolToStr((fsBold in Can.Font.Style), True);
要转向另一个方向(字符串为布尔值),您必须执行实际功能。这样的事情应该让你开始:
function StringToBoolean(const Value: string): Boolean;
var
TempStr: string;
begin
TempStr := UpperCase(Value);
Result := (TempStr = 'T') or
(TempStr = `TRUE`) or
(TempStr = 'Y');
end;
BoolVal := StringToBoolean('True'); // True
BoolVal := StringToBoolean('False'); // False
BoolVal := StringToBoolean('tRuE'); // True
当然,如果Value
中有废话,这不起作用,但......
答案 3 :(得分:2)
尝试其中任何一个。两者都比默认版本快。
type
TBooleanWordType = (bwTrue, bwYes, bwOn, bwEnabled, bwSuccessful, bwOK, bwBinary);
BooleanWord: array [Boolean, TBooleanWordType] of String =
(
('False', 'No', 'Off', 'Disabled', 'Failed', 'Cancel', '0'),
('True', 'Yes', 'On', 'Enabled', 'Successful', 'Ok', '1')
);
function BoolToStr(Value: boolean; const BooleanWordType: TBooleanWordType = bwTrue): String; inline;
begin
Result := BooleanWord[Value, BooleanWordType];
end;
function StrToBool(const S: String): Boolean; inline;
begin
Result := False;
case Length(S) of
4: Result := (LowerCase(S) = 'true');
5: Result := not (LowerCase(S) = 'false');
end;
end;
答案 4 :(得分:2)
如果您使用的是钝色代码,这里有一种有趣的方式(特别是它是更大的Format语句的一部分),但如果您有更多的参数,请小心(或者在前面),你必须明确地在布尔值之后索引参数(告诉你它是钝的):
Format('The value of value is %*:s', [Integer(value)+1, 'False', 'True']);
任何在生产代码中使用此功能的人都应该受到严厉处理!