黄山旅游报价,斯内维尔的账本,个人趣向国语版
通过反射或dynamic,我们可以拿到object类对象属性的值,但他们的又有什么差别呢?我做了一下简单的比较:
using system; using system.collections.generic; using system.linq; using system.reflection; using system.text; using system.threading.tasks; namespace linqtestconsole { class program { static void main(string[] args) { list lo = new list(); for (int i = 0; i <1500000; i++) { object o = new { name = "name" + i, age = i }; lo.add(o); } datetime dt10= datetime.now; //通过dynamic取值 foreach(dynamic o in lo){ string s = o.name + "的年龄是:" + o.age + "岁"; } datetime dt11 = datetime.now; timespan span = dt11.subtract(dt10); console.writeline("用时"+ span.minutes + "分钟" + span.seconds + "秒"+span.milliseconds+"毫秒"); //通过反射取值 foreach (object o in lo) { string s=getpropertyvaluebyname("name", o).tostring() + "的年龄是:" + getpropertyvaluebyname("age", o).tostring() + "岁"; } datetime dt22 = datetime.now; span = dt22.subtract(dt11); console.writeline("用时" + +span.minutes + "分钟" + span.seconds + "秒" + span.milliseconds + "毫秒"); console.read(); } /// /// 反射,通过属性名称,取值 /// /// /// /// public static object getpropertyvaluebyname(string propertyname, object o) { if (o == null) { o = new { }; } //创建一个返回对象 object returnobject = new object(); propertyinfo[] p1 = o.gettype().getproperties(); foreach (propertyinfo pi in p1) { if (pi.name.tolower() == propertyname.tolower()) { returnobject = pi.getvalue(o); } } return returnobject; } } }
运行结果:
总结:
从上面可以看出,反射是有点慢的,以后还是尽量用dynamic吧,方便实用。
我比较的方式可能不是很正确,但是,这样的结果也在一定程度上反映了一些问题。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Net Core Web Api项目与在NginX下发布的方法
asp.net core3.1 引用的元包dll版本兼容性问题解决方案
IdentityServer4实现.Net Core API接口权限认证(快速入门)
ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径的实现
网友评论