Анализировать динамический как int или отступить к значению по умолчанию - PullRequest
0 голосов
/ 08 марта 2019

У меня есть карта с динамическими значениями, одним из которых может быть int, string или null (т. Е. Несуществующий ключ).

Я хочу сохранить это значение вint переменная.Парсинг, который я придумал, оказался довольно громоздким:

Map<String, dynamic> map = {'maxposts': null}; // or 23 or '42'

// Try to parse an int value or fall back to 0
int maxposts = (map['maxposts'] is int) 
    ? map['maxposts'] 
    : int.tryParse(map['maxposts'] ?? '0') ?? 0;

Есть ли лучший способ сделать такой анализ "попытка-откат"?

1 Ответ

0 голосов
/ 08 марта 2019

Вы можете абстрагировать операцию в функцию, подобную

int intOrStringValue(dynamic o) {
  if (o is String) o = int.tryParse(o);
  return o ?? 0;
}

или

int intOrStringValue(dynamic o) =>
    (o is String ? int.tryParse(o) : o) ?? 0;

. Она становится более читабельной, если вы не повторяете выражение map['maxposts'] по всей логике.

...