我有一些值(我可以将它们放在数组或集合中),如
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”。我怎样才能得到这些变化?
答案 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
事件。在事件处理程序中传递给您的Add
和Remove
个操作(以及其他操作),您可以根据它做出决定。
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);
优于其他解决方案的优势在于,如果您正在处理大型集合,您也不会在保留原始内容时浪费内存。您只能使用一个集合。