在 Dart 中有类似 int 的 bool 解析吗?

Dart中,有一种将 String转换为 int的方便方法:

int i = int.parse('123');

String转换为 bool有类似的方法吗?

bool b = bool.parse('true');
72173 次浏览

不,只需简单使用:

String boolAsString;
bool b = boolAsString == 'true';

布尔没有办法。

var val = 'True';
bool b = val.toLowerCase() == 'true';

应该很简单。

随着最近的 Dart 版本与扩展方法的支持,代码可以使看起来更像 intnumfloat

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.parse('true')那样执行此操作,因为 Dart SDK 是尽可能轻量级的。

Dart SDK 不像 NETFramework 那样统一,例如,NETFramework 中所有基本系统类型都具有以下统一性。

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()