ToString方法大概是.Net时被用得最多的方法了,所有类型都,引用的,值的,都传承了这个从祖先Object开始的光荣传统。调用一次ToString,相当于惊堂木“啪”一下,大喝“堂下案犯报上名来”,这家伙就全招了。
可是写程序如查案,形形色色的人都有,对于些记性差,反应迟钝的家伙,就没那么顺利了。梅(枚)举人就是其中之一,来审问下看看:
1 2 3 4 5 6 7 8 9 10 | static void testEnumToString() { var day = DayOfWeek.Wednesday; string value = null ; for ( int i = 0; i < 1000000; i++) { value = day.ToString(); } Console.WriteLine(value); } |
整理下结果:
次数 |
1 |
2 |
3 |
4 |
时间(ms) |
7135 |
7009 |
7174 |
7010 |
看上去没什么,不过根据本府以往的断案经验,其中似有猫腻。本着勿枉勿纵,对人民负责的态度,不怕麻烦,另寻突破口:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | static void testEnumToString2() { var day = DayOfWeek.Wednesday; string value = null ; for ( int i = 0; i < 1000000; i++) { switch (day) { case DayOfWeek.Friday: value = "Friday" ; break ; case DayOfWeek.Monday: value = "Monday" ; break ; case DayOfWeek.Saturday: value = "Saturday" ; break ; case DayOfWeek.Sunday: value = "Sunday" ; break ; case DayOfWeek.Thursday: value = "Thursday" ; break ; case DayOfWeek.Tuesday: value = "Tuesday" ; break ; case DayOfWeek.Wednesday: value = "Wednesday" ; break ; default : break ; } } Console.WriteLine(value); } |
呈堂证供一上,满堂皆惊:
次数 |
1 |
2 |
3 |
4 |
时间(ms) |
2 |
1 |
1 |
1 |
我大怒,“大胆狂徒,还不从实招来,不然休怪本府大刑伺候”,梅举人哪见这阵势,浑身哆嗦,头拄地跪着,一会儿没了声息,衙役拖起一看,竟吓晕过去了。
“大人,是否冷水浇醒用刑”,我想,看案犯这德性,也挨不住几板子,说“先到案犯家里,搜查证据”。能干的捕头Reflector领命,一下子找到了线索:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public override string ToString() { return InternalFormat((RuntimeType) base .GetType(), this .GetValue()); } private static string InternalFormat(RuntimeType eT, object value) { if (eT.IsDefined( typeof (FlagsAttribute), false )) { return InternalFlagsFormat(eT, value); } string name = GetName(eT, value); if (name == null ) { return value.ToString(); } return name; } |
果然不出所料,案犯肆无忌惮地用了反射,至此案件真相大体明了。如IsDefined和GetName两处,深究下去,触目惊心,令人发指。
可惜天下人,有多少还被蒙在鼓里,浑然不觉,荼毒流弊甚为深远。正本清源之路,漫漫修远。本府一已之力,深感力不从心,望和天下有志之士一道,扬善锄恶,共致太平盛世。
次数 |
1 |
2 |
3 |
4 |
Fill 方法(和上次一样) |
309 |
291 |
292 |
292 |
FillParallel 方法 |
210 |
166 |
165 |
166 |
分类:
.NET基础
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验