程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 如何判斷字符串是否為空串(1)

如何判斷字符串是否為空串(1)

編輯:關於C語言

0. 緣起:

本文寫作緣起於阮的討論——《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<string>
{
  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);

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved