如何从数组或集合中获取更改

时间:2014-08-06 19:54:55

标签: c# arrays collections

我有一些值(我可以将它们放在数组或集合中),如

original = "1", "2", "3", "4", "5, "6", "7", "8", "9"

用户可以对此项进行更改。用户可以删除一些或添加新的:

modified = "2", "3", "4", "6", "10", "11"

用户在此示例中添加了“10”和“11”并删除了“1”,“5”,“7”,“8”和“9”。

如何从我的阵列或集合中获取这些更改。我需要一个已删除项目的结果集,其中包含“1”,“5”,“8”,“9”以及另一项添加的项目“10”和“11”。我怎样才能得到这些变化?

2 个答案:

答案 0 :(得分:5)

您可以使用Except扩展名方法:

var added = modified.Except(original);    // "10", "11"
var removed = original.Except(modified);  // "1", "5", "7", "8", "9" 

但您可能希望使用ObservableCollection<T>,以防万一您需要对修改做出反应。

答案 1 :(得分:1)

您可以改为使用ObservableCollection<T>并订阅其CollectionChanged事件。在事件处理程序中传递给您的AddRemove个操作(以及其他操作),您可以根据它做出决定。

var original = new ObservableCollection<string> { "1", "2", "3", "4", "5, "6", "7", "8", "9" };

original.CollectionChanged += (s, e) => {
  if(e.Action == NotifyCollectionChangedAction.Add) {
    //Store or do something with added items in e.NewItems.
  } 
  else if (e.Action == NotifyCollectionChangedAction.Remove {
    //store or do something with removed items in e.OldItems
  }
};

original.Add("15");
original.RemoveAt(3);

优于其他解决方案的优势在于,如果您正在处理大型集合,您也不会在保留原始内容时浪费内存。您只能使用一个集合。