using System; using System.Linq; using System.Collections; using System.Collections.Generic; using LeanCloud.Storage.Internal.Codec; namespace LeanCloud.Storage.Internal.Operation { internal class LCRemoveOperation : ILCOperation { List valueList; internal LCRemoveOperation(IEnumerable values) { valueList = new List(values); } public ILCOperation MergeWithPrevious(ILCOperation previousOp) { if (previousOp is LCSetOperation || previousOp is LCDeleteOperation) { return previousOp; } if (previousOp is LCRemoveOperation removeOp) { valueList.AddRange(removeOp.valueList); } throw new ArgumentException("Operation is invalid after previous operation."); } public object Encode() { return new Dictionary { { "__op", "Remove" }, { "objects", LCEncoder.Encode(valueList) } }; } public object Apply(object oldValue, string key) { List list = new List(oldValue as IEnumerable); list.RemoveAll(item => valueList.Contains(item)); return list; } public IEnumerable GetNewObjectList() { return null; } } }