title: Compare Properties automatically
body: <p><strong>I want to get the names of all properties that changed for matching objects.</strong> I have these (simplified) classes:</p>
  
  <pre><code>public enum PersonType { Student, Professor, Employee }
  
  class Person {
      public string Name { get; set; }
      public PersonType Type { get; set; }
  }
  
  class Student : Person {
       public string MatriculationNumber { get; set; }
  }
  
  class Subject {
       public string Name { get; set; }
       public int WeeklyHours { get; set; }
  }
  
  class Professor : Person {
      public List&lt;Subject&gt; Subjects { get; set; }
  }
  </code></pre>
  
  <p>Now I want to get the objects where the Property values differ:</p>
  
  <pre><code>List&lt;Person&gt; oldPersonList = ...
  List&lt;Person&gt; newPersonList = ...
  List&lt;Difference&gt; = GetDifferences(oldPersonList, newPersonList);
  
  public List&lt;Difference&gt; GetDifferences(List&lt;Person&gt; oldP, List&lt;Person&gt; newP) {
       //how to check the properties without casting and checking 
       //for each type and individual property??
       //can this be done with Reflection even in Lists??
  }
  </code></pre>
  
  <p>In the end I would like to have a list of <code>Difference</code>s like this:</p>
  
  <pre><code>class Difference {
      public List&lt;string&gt; ChangedProperties { get; set; }
      public Person NewPerson { get; set; }
      public Person OldPerson { get; set; }
  }
  </code></pre>
  
  <p>The <code>ChangedProperties</code> should contain the name of the changed properties.</p>