亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

如何判斷字符串是否為空串?

2019-11-18 12:01:31
字體:
來源:轉載
供稿:網友

  本文寫作緣起于阮的討論——《FxCop告訴我,檢查一個字符串是否為空要用string.Length?!?。其實用過FxCop的人都知道它會建議你使用String.Length屬性來判定字符串是否為空串,但你又是否明白其中的緣由呢?今天有點閑,特意寫下這篇文章,希望有點幫助。
  
  1. 三種常用的字符串判空串方法:
  Length法:bool isEmpty = (str.Length == 0);
  Empty法:bool isEmpty = (str == String.Empty);
  General法:bool isEmpty = (str == "");
  
  2. 深入內部機制:
  要探討這三種方法的內部機制,我們得首先看看.NET是怎樣實現的,也就是要看看.NET的源代碼!然而,我們哪里找這些源代碼呢?我們同樣有三種方法:
  Rotor法:一個不錯的選擇就是微軟的Rotor,這是微軟的一個源代碼共享項目。
  Mono法:另一個不錯的選擇當然就是真正的開源項目Mono啦!
  Reflector法:最后一個選擇就是使用反編譯器,不過這種重組的代碼不一定就是原貌,只不過是一種“近似值”,你可以考慮使用Reflector這個反編譯器[1]。
  這里我采用Reflector法,我們先來看看一下源代碼[2](片段):
  
  public sealed class String : IComparable, ICloneable, IConvertible, IEnumerable, IComparable
  {
  static String()
  {
  string.Empty = "";
  
  // Code here
  }
  
  // Code here
  
  public static readonly string Empty;
  
  public static bool Operator ==(string a, string b)
  {
  return string.Equals(a, b);
  }
  
  public static bool Equals(string a, string b)
  {
  if (a == b)
  {
  return true;
  }
  if ((a != null) && (b != null))
  {
  return string.EqualsHelper(a, b);
  }
  return false;
  }
  
  PRivate static unsafe bool EqualsHelper(string ao, string bo)
  {
  // Code here
  
  int num1 = ao.Length;
  if (num1 != bo.Length)
  {
  return false;
  }
  
  // Code here
  }
  
  private extern int InternalLength();
  
  public int Length
  {
  get
  {
  return this.InternalLength();
  }
  }
  
  // Code here
  }
  
  Rotor里面String類的代碼與此沒什么不同,只是沒有EqualsHelper方法,代之以如下的聲明:
  
  public extern bool Equals(String value);
  
  進一步分析:
  首先是Empty法,由于String.Empty是一個靜態只讀域,只會被創建一次(在靜態構造函數中)。但當我們使用Empty法進行判空時,.NET還會依次展開調用以下的方法,而后兩個方法內部還會進行對象引用判等!
  
  public static bool operator ==(string a, string b);
  
  public static bool Equals(string a, string b);
  
  private static unsafe bool EqualsHelper(string ao, string bo);
  
  若使用General法判等的話,情況就“更勝一籌”了!因為.NET除了要依次展開調用上面三個方法之外,還得首先創建一個臨時的空字符串實例,假如你要進行大量的比較,這恐怕是想一想就很嚇人了!
  而對于Length法,我們就可以繞過上面這些繁瑣的步驟,直接進行整數(字符串長度)判等,我們知道,大多數情況下,整數判等都要來得快(我實在想不出比它更快的了,在32位系統上,System.Int32運算最快了)!
  另外,我們還可以看到,在EqualsHelper方法里面.NET會先使用Length法來進行判等!可惜的是我無法獲得InternalLength方法的代碼。但我在Mono的源代碼里面看到更簡明的實現:
  
  class String
  {
  private int length;
  
  public int Length
  {
  
  get
  {
  return length;
  
  }
  }
  
  // .
  }
  
  然而使用Length法進行字符串判空串時,有一點要注重的,就是你必須先判定該字符串實例是否為空引用,否則將會拋出NullReferenceException異常!于是,我們有了一個經過改進的Length法:
  
  void Foo(string bar)
  {
  if ((bar != null) && (bar.Length == 0))
  //
  }
  
  3. 最后總結:
  從上面的分析我們可以看到,使用Length法來進行字符串判空串是有著很大的性能優勢的,尤其在進行大量字符串判空時!當然首先得判定字符串實例是否為空引用!
  
  有關Reflector的介紹可以參見《Reflector: Get the secret inside .NET assemblies.》一文。
  本代碼反編譯自版本號為2.0.3600.0的.NET Framework。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国产91乱高清在线观看| 精品人伦一区二区三区蜜桃免费| 日本一欧美一欧美一亚洲视频| 91香蕉嫩草神马影院在线观看| 精品国产乱码久久久久久婷婷| 亚洲一品av免费观看| 国产精品爱啪在线线免费观看| 欧亚精品中文字幕| 成人a视频在线观看| 亚洲成人国产精品| 亚洲a在线播放| 琪琪第一精品导航| 日韩在线不卡视频| 2023亚洲男人天堂| 亚洲欧洲日产国码av系列天堂| 欧洲亚洲免费视频| 91成人在线观看国产| 97成人精品视频在线观看| 欧美电影免费在线观看| 在线播放国产一区二区三区| 国产精品极品美女在线观看免费| 久久人人97超碰精品888| 亚洲精品在线看| 日本一区二区在线免费播放| 国产在线精品成人一区二区三区| 亚洲精品中文字幕有码专区| 欧美日韩亚洲一区二区| 欧美另类高清videos| 久久国产精品久久久久久久久久| 伊人男人综合视频网| 欧美成年人视频| 日韩av在线免费看| 久久久久五月天| 久久精品国产欧美亚洲人人爽| 亚洲国产精品va在线观看黑人| 精品久久久999| 亚洲电影免费观看高清完整版在线观看| 欧美精品久久久久久久久| 欧美精品一二区| 国产精品27p| 中文字幕日韩在线观看| 97精品一区二区视频在线观看| 国产欧美精品va在线观看| 欧美日韩另类视频| 国产精品第8页| 亚洲第一免费网站| 日韩欧美一区视频| 91tv亚洲精品香蕉国产一区7ujn| 久久国产加勒比精品无码| 国产偷国产偷亚洲清高网站| 国产精品久久久久久五月尺| 日韩欧美一区二区三区久久| 69视频在线免费观看| 国产精品精品久久久久久| 热久久美女精品天天吊色| 91午夜理伦私人影院| 狠狠综合久久av一区二区小说| 国模私拍一区二区三区| 国产做受69高潮| 亚洲va久久久噜噜噜| 亚洲成人激情视频| 最近2019中文字幕第三页视频| 黑人巨大精品欧美一区免费视频| 国产精品一区久久| 国模私拍一区二区三区| 亚洲第一视频在线观看| 欧美激情一级精品国产| 亚洲综合在线小说| 久久国产精品久久久久| www日韩中文字幕在线看| 国产一区二区三区在线视频| 日韩精品在线视频| 久久av.com| 国内精品免费午夜毛片| www.日韩免费| 国模私拍视频一区| 国产日韩欧美视频| 久久91精品国产| 伊人伊人伊人久久| 成人亚洲综合色就1024| 97国产精品视频人人做人人爱| 亚洲人成网站免费播放| 国产美女主播一区| 欧美日韩一区二区三区在线免费观看| 97在线免费观看视频| 97人洗澡人人免费公开视频碰碰碰| 自拍偷拍免费精品| 日韩中文综合网| 日韩欧美aⅴ综合网站发布| 日韩视频亚洲视频| 欧美激情视频在线观看| 亚洲国内精品在线| 久久精品国产亚洲| 欧美伊久线香蕉线新在线| 久久福利视频导航| 日韩亚洲在线观看| 欧美一级视频在线观看| 97久久超碰福利国产精品…| 欧美日韩激情网| 亚洲综合在线做性| 91av在线看| 亚洲欧美在线一区二区| 亚洲欧美日韩一区在线| 欧美—级高清免费播放| 欧美午夜精品久久久久久人妖| 日韩欧美亚洲成人| 国产视频精品在线| 亚洲精品视频播放| 久久天天躁日日躁| 国产精品久久久亚洲| 精品美女久久久久久免费| 久久国产天堂福利天堂| 欧美黑人极品猛少妇色xxxxx| 日韩电影中文字幕在线| 国产精品精品久久久久久| 国产午夜精品理论片a级探花| 国产精品久久久久高潮| 在线成人激情视频| 精品久久久久久久久久久久| 日韩国产精品亚洲а∨天堂免| 日韩欧美一区二区三区| 日本最新高清不卡中文字幕| 九色91av视频| 欧美性在线视频| 亚洲美腿欧美激情另类| 成人激情视频在线| 国产成人精品一区二区三区| 91久久国产精品91久久性色| 国产欧美日韩免费看aⅴ视频| 亚洲黄色www| 国产不卡精品视男人的天堂| 久久久久久亚洲精品中文字幕| 欧美www在线| 日本精品va在线观看| 日韩美女视频免费在线观看| 国产中文日韩欧美| 国产精品免费电影| 日韩精品日韩在线观看| 日韩经典中文字幕| 欧美日韩国产成人| 91av免费观看91av精品在线| 91久久在线播放| 青草青草久热精品视频在线网站| 成人av在线亚洲| 国产精品一区二区3区| 欧美激情亚洲精品| 欧美区二区三区| 日本韩国在线不卡| 亚洲免费成人av电影| 青青草成人在线| 国产成+人+综合+亚洲欧洲| 中文字幕精品一区二区精品| 国产精品综合久久久| 91精品久久久久久久久| 97国产成人精品视频| 清纯唯美亚洲综合| 亚洲高清一区二| 欧美午夜电影在线| 91精品视频观看| 欧美日韩视频免费播放| 日韩欧美在线视频观看| 日韩欧美国产网站| 日韩欧美综合在线视频| 国产精品成人播放|