将Object类型的变量转换成反射获取的类型

YourKing 2014-08-19 11:39:43
通过反射,获取了某个类型
Type typeSomeClass = Type.GetType("SomeClass");
现在有个Object类型的变量obj, 怎样才能得到这样的效果:
SomeClass ins = (SomeClass)obj;
...全文
1542 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
游离失所 2014-08-19
  • 打赏
  • 举报
回复
楼主这个问题 最好用泛型
游离失所 2014-08-19
  • 打赏
  • 举报
回复
Convert.ChangeType(obj,typeSomeClass);
於黾 2014-08-19
  • 打赏
  • 举报
回复
引用 楼主 YourKing 的回复:
通过反射,获取了某个类型 Type typeSomeClass = Type.GetType("SomeClass"); 现在有个Object类型的变量obj, 怎样才能得到这样的效果: SomeClass ins = (SomeClass)obj;
除非你自己swich去挨个类型判断,否则做不到.也不需要这样. 反射可以直接给变量赋值,也可以实例化类,并调用类里面的方法.不需要用一个具体的类型来接.
YourKing 2014-08-19
  • 打赏
  • 举报
回复
感谢各位的解答。因为整个过程都是在反射,取值,然后再反射的结果里面再反射取值,所有的类型也是反射得到的。因为是编译的代码是在低版本的SDK是,而又要想能执行在高版本SDK的某些功能,编译不了的类型方法只有反射了。
於黾 2014-08-19
  • 打赏
  • 举报
回复
既然使用反射,那么类名,结构体名称,属性名称,方法名称,这些都应该是字符串传进来,然后反射赋值或取值或调用 而不是只知道类名,然后就反射,然后才根据到底是哪个类,去对应的做不同的处理
於黾 2014-08-19
  • 打赏
  • 举报
回复
你应该想办法通过反射直接获取结构体里面的属性,而不是转换. 否则还反射干嘛,直接写死不就得了. 要反射,就每一步都反射,反射获取了类之后,又写一堆switch给转类型,那不如一开始就switch
於黾 2014-08-19
  • 打赏
  • 举报
回复
反射调用方法: Type typeSomeClass = Type.GetType("SomeClass"); MethodInfo MI=typeSomeClass.GetMethod("function1"); object[ ] p=new object[]{1,"2",3.3}; object obj=MI.Invork(this,p); obj是函数返回值
YourKing 2014-08-19
  • 打赏
  • 举报
回复
引用 6 楼 Z65443344 的回复:
[quote=引用 4 楼 YourKing 的回复:] 因为变量obj其实也是通过某些反射,然后调用Invoke得到的返回值,所以需要类型转换。 关键是要转换的类型也是通过反射得到的。
关键是为什么要类型转换,转换完又做什么. 如果可以不用转换呢? 不要拍脑袋想个方案,忘掉了最终的目的.[/quote] 转换完成是一个结构体,然后再通过反射访问里面的某些属性。如果不转换,针对Object反射不到这些属性的
於黾 2014-08-19
  • 打赏
  • 举报
回复
如果你的obj是中间结果,你需要通过obj将类实例化,完全可以用反射来实现,而不是先转类型 如果你的obj是最终结果,那么应该是一个可以预见的类型,而不是某个类 可以switch判断,然后拆箱
YourKing 2014-08-19
  • 打赏
  • 举报
回复
引用 5 楼 bdmh 的回复:
得不到具体的类,如果你要访问里面了的属性,可以用反射访问
试过了,不转换过来就反射不到要的属性或方法。
於黾 2014-08-19
  • 打赏
  • 举报
回复
引用 4 楼 YourKing 的回复:
因为变量obj其实也是通过某些反射,然后调用Invoke得到的返回值,所以需要类型转换。 关键是要转换的类型也是通过反射得到的。
关键是为什么要类型转换,转换完又做什么. 如果可以不用转换呢? 不要拍脑袋想个方案,忘掉了最终的目的.
bdmh 2014-08-19
  • 打赏
  • 举报
回复
得不到具体的类,如果你要访问里面了的属性,可以用反射访问
YourKing 2014-08-19
  • 打赏
  • 举报
回复
引用 1 楼 Z65443344 的回复:
[quote=引用 楼主 YourKing 的回复:] 通过反射,获取了某个类型 Type typeSomeClass = Type.GetType("SomeClass"); 现在有个Object类型的变量obj, 怎样才能得到这样的效果: SomeClass ins = (SomeClass)obj;
除非你自己swich去挨个类型判断,否则做不到.也不需要这样. 反射可以直接给变量赋值,也可以实例化类,并调用类里面的方法.不需要用一个具体的类型来接.[/quote] 因为变量obj其实也是通过某些反射,然后调用Invoke得到的返回值,所以需要类型转换。 关键是要转换的类型也是通过反射得到的。

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧