SetValue على خطأ مثيل propertyinfo "كائن لا يطابق نوع الهدف" C #

StackOverflow https://stackoverflow.com/questions/755646

  •  09-09-2019
  •  | 
  •  

سؤال

تم استخدام طريقة نسخ مع هذا الرمز في أماكن مختلفة في المشاريع السابقة (للتعامل مع الكائنات التي لها نفس الخصائص المسماة ولكن لا تستمد من فئة أساسية مشتركة أو تنفيذ واجهة مشتركة).

مكان جديد للعمل، CodeBase الجديد - الآن فشل في SetValue مع "كائن لا يتطابق مع نوع الهدف" حتى على أمثلة بسيطة للغاية ... وقد عملت الأسبوع الماضي ....

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

    }

نأمل أن يشير شخص ما إلى أين أكون مدفا ؟؟؟

هل كانت مفيدة؟

المحلول

يحاول:

toProperty.SetValue(toObj,fromValue,null);

تحاول تمرير العقار (toProperty) ككائن الهدف، بدلا من toObj. وبعد للحصول على معلومات، إذا كنت تفعل الكثير من هذا، فربما تنظر hyperdescriptor., ، والتي يمكن أن تقلل إلى حد كبير تكلفة الانعكاس.

نصائح أخرى

يجب ان يكون

toProperty.SetValue(toObj,fromValue,null);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top