как определить, изменился ли порядок двух списков, и если он изменился, то отображаются новые добавленные или удаленные члены в c#

#c# #asp.net #asp.net-mvc #c#-4.0

#c# #asp.net #asp.net-mvc #c#-4.0

Вопрос:

Я хочу сравнить два списка,у которых есть идентификатор свойств,номер, имя, поэтому я хочу сравнить оба списка, например, если в новом списке есть

 Id Name Number 1 Test 1 2 Test2 2  

и у Олдлиста есть

 Id NewList Number 1 Test 1  

поэтому, когда мы сравниваем оба списка, я должен показать текст, который добавлен в новый список Test2 , или если я удален из нового списка, то должен показать текст, который элемент удален в новой строке

вот мой код, который я пробовал

 StringBuilder oldPref = new StringBuilder(); StringBuilder newPref = new StringBuilder(); newList = GetPref(NewInfo).OrderBy(p =gt; p.Number).Where(x =gt; x.Numbergt; 0).ToList(); OldList = GetPref(OldInfo).OrderBy(p =gt; p.Number).Where(x =gt; x.Numbergt; 0).ToList();   foreach (var item in OldList) {  oldPref .Append(item.Name   Environment.NewLine); } foreach (var item in newList) {  newPref .Append(item.Name   Environment.NewLine); }  if (!String.Equals(oldPref , newPref )) {  note.Append("Order Changed "   Environment.NewLine); } note.Append("From "   Environment.NewLine); note.Append(oldPref); note.Append("To "   Environment.NewLine); note.Append(newPref);  

кто-нибудь может мне помочь с этим, как я это делаю правильно, заранее спасибо

Комментарии:

1. Является ли идентификатор уникальным ключом, который идентифицирует каждый элемент в двух списках?

2. нет списка жестко закодированных значений, так что это похоже на oldlist я извлекаю список для этой записи из бд и получаю новый список из пользовательского интерфейса, затем сериализую оба списка, поэтому оба списка могут иметь одинаковое значение, если в старом и новом списке есть элементы с одинаковым номером, и если я изменюсь из пользовательского интерфейса, он должен быть другим, поэтому я хочу показать, что добавлен новый элемент или если я удаляю пользовательский интерфейс, элемент удаляется

Ответ №1:

Самый простой способ-выполнить итерацию по обоим спискам по одному за раз и посмотреть, содержит ли другой список каждый элемент списка, который повторяется:

 Listlt;MyClassgt; oldList = ...;  Listlt;MyClassgt; newList = ...;    foreach(MyClass item in oldList){  if(newList.Contains(item) == false) {  (insert logic for when item has been removed from oldList)  }  }    foreach(MyClass item in newList){  if(oldList.Contains(item) == false) {  (insert logic for when item has been added to oldList)  }  }