private void DetectChange<T>(List<T> from, List<T> to, out List<T> added, out List<T> removed) where T : IEquatable<T> { _Except(from, to, out added); _Except(to, from, out removed); void _Except<TT>(List<TT> from, List<TT> to, out List<TT> diff) where TT : IEquatable<TT> { diff = new List<TT>(); var contain = false; for (int i = 0; i < from.Count; ++i) { contain = false; for (int k = 0; k < to.Count && !contain; ++k) { if (from[i].Equals(to[k])) { contain = true; } } if (!contain) { diff.Add(from[i]); } } } }
更簡單的寫法是用 Linq
var from = new List<object>(); var to = new List<object>(); var added = from.Except(to).ToList(); var removed = to.Except(from).ToList();