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

