问题描述
现在有一个类,如下:publicclassMyClass{publicstringdd="ddddd";privatestring_Name="myname";publicstringName{get{return_Name;}set{_Name=value;}}privateModel_Model=newModel();publicModelModel//这个是另外一个自定义类{get{return_Model;}set{_Model=value;}}}
MyClassobj=newMyClass();Typet=obj.GetType();System.Reflection.PropertyInfo[]properties=GetProperties(System.Reflection.BindingFlags.Instance|System.Reflection.BindingFlags.Public);
properties[1].ReflectedType这个是Model类型的,现在需要把这个的Type转换成Model类,不用动态创建,直接获得obj类里的Model属性实例,不能直接使用obj变量,只能用object
解决方案
本帖最后由 lsjwq 于 2015-03-18 17:21:29 编辑
解决方案二:
要用反射就一直用反射反射不是有Create方法创建对象吗如果到这里你突然想用Model类来承载这个object,那只能自己写一大堆分支,判断到底是什么类型的
解决方案三:
p.SetValue(obj,newModel())
解决方案四:
引用1楼Z65443344的回复:
要用反射就一直用反射反射不是有Create方法创建对象吗如果到这里你突然想用Model类来承载这个object,那只能自己写一大堆分支,判断到底是什么类型的
其实是想用Type类型,直接获得obj.Model实例对象,但是不能直接写obj.Model代码,说白了就是类似Modelm=((Model)((object)type))这样的过程。
解决方案五:
一般过程:Typet=object.GetType();现在要反向:objectobj=(object)t;,不能用动态创建,引用地址不能改变,原有对象值不变。
解决方案六:
解决方案七:
搞了半天dynamicmodel=newMyClass();mode.Model=obj.GetType只是获取Type,然后根据属性可以SetValue,并不会修改引用地址,因为你传入的就是obj自身
解决方案八:
引用6楼starfd的回复:
搞了半天dynamicmodel=newMyClass();mode.Model=obj.GetType只是获取Type,然后根据属性可以SetValue,并不会修改引用地址,因为你传入的就是obj自身
用SetValue,如果是值类型的对象没有问题,如果是引用类型的对象,引用地址是改变的。HashCode也不一样的。
解决方案九:
引用5楼sp1234的回复:不用动态创建的。无法保证当前对象值。