73

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

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

转换布尔有类似的东西吗?

bool b = bool.parse('true');
4

4 回答 4

125

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.';
  }
}
于 2014-01-15T09:52:20.960 回答
30

不,只需使用:

String boolAsString;
bool b = boolAsString == 'true';
于 2014-01-15T09:50:32.357 回答
4

您无法按照您的描述执行此操作,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类型。

所以你不能以统一的方式做到这一点。只能靠自己。

于 2014-01-15T10:56:41.503 回答
2

其实是的,有!

这很简单

bool.fromEnvironment(strValue, defaultValue: defaultValue);

请记住,您可能需要做strValue.toLowerCase()

于 2020-06-18T08:28:56.303 回答