예제 #1
0
        public FieldCollection <T> Reorder(List <long> ids)
        {
            Guard.NotNull(ids, nameof(ids));

            if (ids.Count != fieldsOrdered.Length || ids.Any(x => !ById.ContainsKey(x)))
            {
                throw new ArgumentException("Ids must cover all fields.", nameof(ids));
            }

            return(Clone(clone =>
            {
                clone.fieldsOrdered = fieldsOrdered.OrderBy(f => ids.IndexOf(f.Id)).ToImmutableArray();
            }));
        }
예제 #2
0
        public FieldCollection <T> Add(T field)
        {
            Guard.NotNull(field, nameof(field));

            if (ByName.ContainsKey(field.Name) || ById.ContainsKey(field.Id))
            {
                throw new ArgumentException($"A field with name '{field.Name}' and id {field.Id} already exists.", nameof(field));
            }

            return(Clone(clone =>
            {
                clone.fieldsOrdered = clone.fieldsOrdered.Add(field);
            }));
        }
예제 #3
0
        public FieldCollection <T> Add(T field)
        {
            Guard.NotNull(field, nameof(field));

            if (ByName.ContainsKey(field.Name))
            {
                throw new ArgumentException($"A field with name '{field.Name}' already exists.", nameof(field));
            }

            if (ById.ContainsKey(field.Id))
            {
                throw new ArgumentException($"A field with id {field.Id} already exists.", nameof(field));
            }

            return(Clone(clone =>
            {
                clone.fieldsOrdered = clone.fieldsOrdered.Union(Enumerable.Repeat(field, 1)).ToArray();
            }));
        }