fork download
  1. using System;
  2. using System.Linq.Expressions;
  3. using System.Reflection;
  4.  
  5. public class Address
  6. {
  7. public string AddressID { get; set; }
  8. public int AddressStagingID { get; set; }
  9. public string Address1 { get; set; }
  10. public string Address2 { get; set; }
  11. public string City { get; set; }
  12. public string County { get; set; }
  13. public string Postcode { get; set; }
  14. public string Country { get; set; }
  15. public bool PreferredAddress { get; set; }
  16. public int? DBID { get; set; }
  17. }
  18.  
  19. class Ideone
  20. {
  21. public static void Main()
  22. {
  23. Address a1 = new Address();
  24. a1.AddressID = "100";
  25.  
  26. Address a2 = new Address();
  27. a2.AddressID = "200";
  28. Console.WriteLine(IsObjectModified(a1,a2,a=>a.AddressID));
  29. }
  30.  
  31. public static bool IsObjectModified<TSource, TProperty>(TSource object1, TSource object2, params Expression<Func<TSource, TProperty>>[] props)
  32. {
  33. Type objectType = typeof(TSource);
  34. if (props == null)
  35. return object1.Equals(object2);
  36.  
  37. foreach (Expression<Func<TSource, TProperty>> prop in props)
  38. {
  39. MemberExpression memberExpression = prop.Body as MemberExpression;
  40.  
  41. foreach (PropertyInfo pi in objectType.GetProperties())
  42. {
  43. if (!pi.Name.Equals(memberExpression.Member.Name))
  44. {
  45. var valueA1 = pi.GetValue(object1);
  46. var valueA2 = pi.GetValue(object2);
  47. if (valueA1 != null && valueA2 != null)
  48. if (!valueA1.Equals(valueA2))
  49. return true;
  50. }
  51. }
  52. }
  53.  
  54. return false;
  55. }
  56. }
Success #stdin #stdout 0.05s 28192KB
stdin
Standard input is empty
stdout
False