title: SetValue on PropertyInfo instance error "Object does not match target type" c#
body: <p>Been using a Copy method with this code in it in various places in previous projects (to deal with objects that have same named properties but do not derive from a common base class or implement a common interface).</p>
  
  <p>New place of work, new codebase - now it's failing at the SetValue with "Object does not match target type" even on very simple examples... and it worked last week....</p>
  
  <pre><code>    public static void Copy(object fromObj, object toObj)
      {   
          Type fromObjectType = fromObj.GetType();
          Type toObjectType = toObj.GetType();
  
          foreach (System.Reflection.PropertyInfo fromProperty in 
              fromObjectType.GetProperties())
          {
              if (fromProperty.CanRead)
              {
                  string propertyName = fromProperty.Name;
                  Type propertyType = fromProperty.PropertyType;
  
                  System.Reflection.PropertyInfo toProperty = 
                      toObjectType.GetProperty(propertyName);
  
                  Type toPropertyType = toProperty.PropertyType;
  
                  if (toProperty != null &amp;&amp; toProperty.CanWrite)
                  {
                      object fromValue = fromProperty.GetValue(fromObj,null);
                      toProperty.SetValue(toProperty,fromValue,null);
                  }
              }
          }
      }
  
      private class test
      {
          private int val;
          private string desc;
  
          public int Val { get { return val; } set { val = value; } }
  
          public string Desc { get { return desc; } set { desc = value; } }
  
      }
  
      private void TestIt()
      {
          test testo = new test();
          testo.Val = 2;
          testo.Desc = "TWO";
  
          test g = new test();
  
          Copy(testo,g);
  
      }
  </code></pre>
  
  <p>Hopefully someone can point out where I am being daft???</p>