none
运行时的类型转换问题 RRS feed

  • 问题

  •         public bool SetObjectValue(object o, string PropertyName, object PropertyValue)
            {
                foreach (System.Reflection.PropertyInfo p in o.GetType().GetProperties())
                {
                    if (p.Name == PropertyName)
                    {
                        p.SetValue(o, PropertyValue, null);
                        return true;
                    }
                }
                return false;
            }

    如上一段代码,我希望能根据属性名和新的属性值,利用反射来对对象进行赋值更新,但在实际运行中,总是不可避免的遇到类型转换异常。

    我想我应该在p.SetValue之前,对PropertyValue先进行类型转换。假设需要赋值的属性都是String、值类型,以及装盒的值类型。想咨询一下这个转换代码应该如何写,谢谢。(假设我知道类型后已经有自己的类型转换函数了)。

    • 已编辑 Jeuo 2014年9月19日 2:06 排版
    2014年9月18日 9:29

答案

  • 你好:

    可以先判断一下当前PropertyInfo的属性的类型,然后将PropertyValue转换成这个类型,当然需要捕获类型无法转换的异常。示例代码:

    class Program
        {
            static void Main(string[] args)
            {
                TestClass testClass = new TestClass() { 
                    TestProperty1="HelloWorld",
                    TestProperty2=1
                };
    
                SetObjectValue(testClass, "TestProperty2", "20");
            }
    
            public static bool SetObjectValue(object o, string PropertyName, object PropertyValue)
            {
                foreach (System.Reflection.PropertyInfo p in o.GetType().GetProperties())
                {
                    if (p.Name == PropertyName)
                    {
                        PropertyValue= Convert.ChangeType(PropertyValue, p.PropertyType);
                        p.SetValue(o, PropertyValue, null);
                        return true;
                    }
                }
                return false;
            }
        }
    
    
    
        class TestClass
        {
            public string TestProperty1 { get; set; }
    
            public int TestProperty2 { get; set; }
        }


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年9月19日 0:17
    版主