Ce face Iterable.cast
cast<R>() returnează o „vedere” a colecției în care elementele au tipul R. Nu copiază nimic și nu verifică nimic pe loc: fiecare element este convertit (as R) abia când îl citești. Dacă un element nu are tipul cerut, apare TypeError în acel moment.
Este util pentru date venite ca List<dynamic> sau List<Object?>, de exemplu dintr-un JSON decodat, despre care știi că au un anumit tip. Dacă vrei doar elementele de tipul potrivit, fără erori, folosește whereType<R>(). List, Set și Map au propriile metode cast.
Parametri
| Parametru | Descriere |
|---|---|
R |
Tipul în care sunt văzute elementele. |
Ce returnează
Un Iterable<R> (pe o listă, o List<R>) care verifică elementele la citire.
Exemple
Exemplul 1: Date dintr-un JSON decodat
import 'dart:convert';
void main() {
final decodat = jsonDecode('{"note": [9, 10, 7]}') as Map<String, dynamic>;
final brute = decodat['note'] as List<dynamic>;
final List<int> note = brute.cast<int>();
print('suma: ${note.reduce((a, b) => a + b)}');
}
Rezultat
suma: 26
Exemplul 2: cast verifică abia la citire
void main() {
final amestec = <Object>[1, 2, 'trei', 4];
final numere = amestec.cast<int>();
print('cast a reușit, încă nimic verificat');
try {
for (final n in numere) {
print(n * 10);
}
} on TypeError {
print('TypeError: "trei" nu este int');
}
print('whereType: ${amestec.whereType<int>()}');
}
Rezultat
cast a reușit, încă nimic verificat
10
20
TypeError: "trei" nu este int
whereType: (1, 2, 4)
Greșeli frecvente
- Crezi că
casttransformă valorile (de exemplu, text în număr). Nu face conversii: verifică doar tipul. Pentru conversii foloseștemap(int.parse).
Comenzi înrudite
Iterable.where: Păstrează doar elementele care trec un test; whereType păstrează doar elementele de un anumit tip.Iterable.map: Transformă fiecare element cu o funcție și returnează un iterable nou, leneș, cu rezultatele.Stream.cast: Prezintă stream-ul ca Stream<R>; fiecare valoare este verificată la rulare că are tipul R.