title: Comparing two lists to find added or removed element in one of them
body: <p>TL;DR version:</p>
  
  <p>Is there a way to enumerate over two lists deffering by exactly one element (which may be either an additional or a missing element) and tell which element is changed, while matching all the other elements?</p>
  
  <hr>
  
  <p>My class have a <code>List&lt;View&gt;</code> property, which Is created from a <code>List&lt;Model&gt;</code> injected via constructor. Each <code>View</code> wraps its respective <code>Model</code> as a public property.</p>
  
  <p>In the same scope, there is an <code>void Update(List&lt;Model&gt; newList)</code> routine, which receives another list of <code>Model</code> with the following condition: it is the same <code>List&lt;Model&gt;</code> as before, <strong>plus or minus exactly one element</strong> . That is because <code>Update</code> is called every time an item is added or removed from a data-bound list elsewhere, and the application only has the option to add/remove one element at a time.</p>
  
  <p>The motivation for the <code>Update</code> operation, instead of simply replacing the Models (wrapped in Views) of the old list with new one, is that <code>View</code> classes <em>store state</em>, so I want to replace their model, but keep their state - which is not stored in the Models anyway.</p>
  
  <p>The problem is: I have to add new View if there is a new Model, I have to remove the respective View when the respective Model is absent, and I must <em>match already existing views with their already existing models, except for the element added or removed</em>. I'm unsure how to do that.</p>
  
  <p>So I was thinking about comparing the Model in the first element of the list to the first element of the new list, and if they match then go to the second element, and so on. At one point, they will differ, but this can be because of the addition of an element (and then the remaining will be shifted one index), or due to removal of one element (in which case the remaining will be shifted down, and the different element will actually be an already-existing element in the list).</p>
  
  <p>Is there any sensible way to tell if the first different element is due to addition or removal?</p>