property name convert c# reflection setvalue

c# - name - set value java



Error de instancia de SetValue en PropertyInfo "El objeto no coincide con el tipo de destino" c# (2)

He estado utilizando un método de Copia con este código en varios lugares en proyectos anteriores (para tratar con objetos que tienen las mismas propiedades con nombre pero que no derivan de una clase base común ni implementan una interfaz común).

Nuevo lugar de trabajo, nuevo código base - ahora está fallando en el SetValue con "El objeto no coincide con el tipo de destino" incluso en ejemplos muy simples ... y funcionó la semana pasada ...

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 && 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); }

Esperemos que alguien pueda señalar donde estoy siendo tonto ???


Debiera ser

toProperty.SetValue(toObj,fromValue,null);


Tratar:

toProperty.SetValue(toObj,fromValue,null);

Está intentando pasar la propiedad ( toProperty ) como el objeto de destino, en lugar de toObj . Para obtener información, si está haciendo mucho de esto, tal vez considere HyperDescriptor , que puede reducir enormemente el costo de reflexión.