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();