我在几乎所有的项目中都多次使用过这个场景,当我在做某种数据转换时,当涉及到布尔值时,我有点迷失了,当它变得简单的时候。下面这条语句在我的代码中就像一个疼痛的拇指一样突出:
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'));
我确信这不是一个真正的命令,但我希望在一行代码中实现这种类型的简单性。
发布于 2012-11-06 08:54:17
在单元StrUtils
中,有ifthen()
StrVal := IfThen(BoolVal,'True','False');
对于这个特定的例子,你甚至可以使用:
StrVal := BoolToStr(BoolVal);
发布于 2012-11-06 14:36:43
没人听说过布尔值索引的数组吗?
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');
发布于 2012-11-06 08:55:21
用于将布尔值转换为字符串的是BoolToStr,它至少在Delphi2007年就出现了。您可以在上一个示例中使用它,如下所示:
TextVal := BoolToStr((fsBold in Can.Font.Style), True);
对于另一个方向(string到Boolean),您必须执行一个实际的函数。像这样的东西应该会让你开始:
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
中有废话,这是不起作用的,但是...
https://stackoverflow.com/questions/13242819
复制相似问题