本文摘自PHP中文网,作者黄舟,侵删。
摘自:csdn
给一个对象属性赋值可以通过PropertyInfo.SetValue()方式进行赋值,但要注意值的类型要与属性保持一致。
创建对象实例的两种方法:
1.
1 | var obj = Assembly.Load( "AssemblyName" ).CreateInstance( "AssemblyName" + "ClassFullName" );
|
2.
1 2 | var
obj = Activator.CreateInstance(ClassType);
|
创建好实例时,现在可以给当前实例的某个属性赋值,首先获取要赋值的属性。
1 | var property = obj.GetType().GetProperty( "PropertyName" );
|
赋值可通过PropertyInfo.SetValue()方法,详见MSDN。
情况1,该属性类型是已知类型,例如:int
1 2 | int value=500;
property.SetValue(obj,value, null );
|
这里需要注意value值的类型必须和属性类型一致,否则会抛出TargetException异常。
情况2,该属性类型是已知类型,原值是其他类型。例如:目标类型为int,值为string
1 2 | string value= "500" ;
property.SetValue(obj, int .TryParse(value), null );
|
前两种情况都很简单,有时业务会比较复杂,对目标类型不确定,需要程序运行时判断。
情况3,该属性类型是未知非泛型类型,不确定目标类型,如何进行类型转换。
1 2 | object value= "500" ;
property.SetValue(obj,Convert.ChangeType(value,property.PropertyType), null );
|
这样就可以解决大多数问题了。
阅读剩余部分
相关阅读 >>
c#中发送邮件的实现方法详解
.net中抽象类实现多态
.net core和.net区别
.net core如何动态调用泛型解决方法
c#中在构造函数中访问虚成员有什么问题?
c# 实现截图功能的操作实例
.net安装framework出现报错的处理教程
c# winform跨线程访问控件的图文详解
在linux下搭建.net core开发环境教程
关于url后面传中文方法总结
更多相关阅读请进入《csharp》频道 >>
清华大学出版社
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。
转载请注明出处:木庄网络博客 » C#如何通过对象属性名修改值的实例