Контейнеры
Название | Объявление типа | Пример типа | Пояснение |
---|---|---|---|
Список | List<Type> |
List<Int32> |
Последовательность переменной длины, состоящая из элементов одного типа. |
Словарь | Dict<KeyType,ValueType> |
Dict<String,Int32> |
Набор пар ключ-значение с указанными типами для ключа и значения. |
Кортеж | Tuple<Type1,...,TypeN> |
Tuple<Int32,Double> |
Набор безымянных элементов фиксированной длины с указанными типами всех элементов. |
Структура | Struct<Name1:Type1,...,NameN:TypeN> |
Struct<Name:String,Age:Int32> |
Набор именованных полей с указанными типами значений, фиксированный на момент начала запроса (то есть обязательно не зависящий от данных). |
Поток | Stream<Type> |
Stream<Int32> |
Однопроходной итератор по значениям одного типа. Не является сериализуемым. |
Вариант над кортежем | Variant<Type1,Type2> |
Variant<Int32,String> |
Кортеж, про который известно, что заполнен ровно один элемент. |
Вариант над структурой | Variant<Name1:Type1,Name2:Type2> |
Variant<value:Int32,error:String> |
Структура, про которую известно, что заполнен ровно один элемент. |
При необходимости контейнеры можно вкладывать друг в друга в произвольных комбинациях, например List<Tuple<Int32,Int32>>
.
Опциональные значения в некоторых контекстах также могут рассматриваться как один из видов контейнеров (Optional<Type>
), который ведёт себя как список длины 0 или 1.
Для представления множеств следует использовать словарь с значениями типа Void
— Dict<T, Void>
.
Для обращения к элементам контейнера используется точка или фигурные скобки, в зависимости от его типа.