Контейнеры

    Название Объявление типа Пример типа Пояснение
    Список 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.

    Для представления множеств следует использовать словарь с значениями типа VoidDict<T, Void>.

    Для обращения к элементам контейнера используется точка или фигурные скобки, в зависимости от его типа.