网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计资源 > .Net编程 > 正文

能相差7千倍的ToString方法

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

ToString方法大概是.Net时被用得最多的方法了,所有类型都,引用的,值的,都传承了这个从祖先Object开始的光荣传统。调用一次ToString,相当于惊堂木“啪”一下,大喝“堂下案犯报上名来”,这家伙就全招了。
  

可是写程序如查案,形形色色的人都有,对于些记性差,反应迟钝的家伙,就没那么顺利了。梅(枚)举人就是其中之一,来审问下看看:

  1. static void testEnumToString() 
  2.     var day = DayOfWeek.Wednesday; 
  3.     string value = null
  4.     for (int i = 0; i < 1000000; i++) 
  5.     { 
  6.         value = day.ToString(); 
  7.     } 
  8.     Console.WriteLine(value); 

 

整理下结果:

 次数

 1

 2

 3

 4

 时间(ms)

 7135

 7009

 7174

 7010

  看上去没什么,不过根据本府以往的断案经验,其中似有猫腻。本着勿枉勿纵,对人民负责的态度,不怕麻烦,另寻突破口:

  1. static void testEnumToString2() 
  2.  { 
  3.      var day = DayOfWeek.Wednesday; 
  4.      string value = null
  5.      for (int i = 0; i < 1000000; i++) 
  6.      { 
  7.          switch (day) 
  8.          { 
  9.              case DayOfWeek.Friday: 
  10.                  value = "Friday"
  11.                  break
  12.              case DayOfWeek.Monday: 
  13.                  value = "Monday"
  14.                  break
  15.              case DayOfWeek.Saturday: 
  16.                  value = "Saturday"
  17.                  break
  18.              case DayOfWeek.Sunday: 
  19.                  value = "Sunday"
  20.                  break
  21.              case DayOfWeek.Thursday: 
  22.                  value = "Thursday"
  23.                  break
  24.              case DayOfWeek.Tuesday: 
  25.                  value = "Tuesday"
  26.                  break
  27.              case DayOfWeek.Wednesday: 
  28.                  value = "Wednesday"
  29.                  break
  30.              default
  31.                  break
  32.          } 
  33.      } 
  34.      Console.WriteLine(value); 
  35.  } 

 

呈堂证供一上,满堂皆惊:

 次数

 1

 2

 3

 4

 时间(ms)

 2

 1

 1

 1

  我大怒,“大胆狂徒,还不从实招来,不然休怪本府大刑伺候”,梅举人哪见这阵势,浑身哆嗦,头拄地跪着,一会儿没了声息,衙役拖起一看,竟吓晕过去了。

  “大人,是否冷水浇醒用刑”,我想,看案犯这德性,也挨不住几板子,说“先到案犯家里,搜查证据”。能干的捕头Reflector领命,一下子找到了线索:

  1. public override string ToString() 
  2.     return InternalFormat((RuntimeType) base.GetType(), this.GetValue()); 
  3.  
  4. private static string InternalFormat(RuntimeType eT, object value) 
  5.     if (eT.IsDefined(typeof(FlagsAttribute), false)) 
  6.     { 
  7.         return InternalFlagsFormat(eT, value); 
  8.     } 
  9.     string name = GetName(eT, value); 
  10.     if (name == null
  11.     { 
  12.         return value.ToString(); 
  13.     } 
  14.     return name; 

 果然不出所料,案犯肆无忌惮地用了反射,至此案件真相大体明了。如IsDefined和GetName两处,深究下去,触目惊心,令人发指。
  可惜天下人,有多少还被蒙在鼓里,浑然不觉,荼毒流弊甚为深远。正本清源之路,漫漫修远。本府一已之力,深感力不从心,望和天下有志之士一道,扬善锄恶,共致太平盛世。

  • 上一篇资讯: 用C#创建可拖动窗体
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师