【发布时间】:2014-02-03 17:11:16
【问题描述】:
在 Dart 中,有一种将 String 转换为 int 的便捷方法:
int i = int.parse('123');
是否有类似的转换布尔值的方法?
bool b = bool.parse('true');
【问题讨论】:
标签: parsing boolean dart coercion
在 Dart 中,有一种将 String 转换为 int 的便捷方法:
int i = int.parse('123');
是否有类似的转换布尔值的方法?
bool b = bool.parse('true');
【问题讨论】:
标签: parsing boolean dart coercion
没有。只需使用:
String boolAsString;
bool b = boolAsString == 'true';
【讨论】:
Bool 没有方法。
var val = 'True';
bool b = val.toLowerCase() == 'true';
应该很容易。
借助支持扩展方法的最新 Dart 版本,可以使代码看起来更像 int、num、float。
extension BoolParsing on String {
bool parseBool() {
return this.toLowerCase() == 'true';
}
}
void main() {
bool b = 'tRuE'.parseBool();
print('${b.runtimeType} - $b');
}
另见https://dart.dev/guides/language/extension-methods
致@remonh87 的评论
如果你想要精确的'false' 解析,你可以使用
extension BoolParsing on String {
bool parseBool() {
if (this.toLowerCase() == 'true') {
return true;
} else if (this.toLowerCase() == 'false') {
return false;
}
throw '"$this" can not be parsed to boolean.';
}
}
【讨论】:
bool b = val.toLowerCase() == true.toString().toLowerCase();,如果你够怪到这种程度。
"true" 的东西都被视为错误。
你不能像你描述的 bool.parse('true') 那样执行这个操作,因为 Dart SDK 尽可能是轻量级的。
Dart SDK 不像 NET Framework 那样统一,所有基本系统类型都有以下统一。
IConvertible.ToBoolean
IConvertible.ToByte
IConvertible.ToChar
IConvertible.ToDateTime
IConvertible.ToDecimal
IConvertible.ToDouble
IConvertible.ToInt16
IConvertible.ToInt32
IConvertible.ToInt64
IConvertible.ToSByte
IConvertible.ToSingle
IConvertible.ToString
IConvertible.ToUInt16
IConvertible.ToUInt32
IConvertible.ToUInt64
这些类型也有parse方法,包括Boolean类型。
所以你不能以统一的方式做到这一点。只能靠自己。
【讨论】:
其实是的,有!
就这么简单
bool.fromEnvironment(strValue, defaultValue: defaultValue);
请记住,您可能需要这样做strValue.toLowerCase()
【讨论】:
true,fromEnvironment 返回 true。奇怪的是,在实践中这是行不通的。即使输入字符串为true,bool.fromEnvironment 也始终返回 false。