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, ienumerabl程式設計客棧e, icomparable
... // code here
public static readonly string empty;
public static bool operator ==(string a, string b)
...public static bool equals(string a, string b)
...if ((a != null) && (b != null))
...程式設計客棧 return false;
}private static unsafe bool equalshelper(string ao, string bo)
...&nwww.cppcns.combsp; // code here
}private extern int internallength();
public int length
...}
// 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
... }
// .
}然而使用length法進行字串判空串時,有一點要注意的,就是你必須先判斷該字串例項是否為空引用,否則將會丟擲nullreferenceexception異常!於是,我們有了一個經過改進的length法:
複製** **如下:
void foo(string bar)
...3. 最後總結:
從上面的分析我們可以看到,使用length法來進行字串判空串是有著很大的效能優勢的,尤其在進行大量字串判空時!當然首先得判斷字串例項是否為空引用!
本文標題: c# 判斷字串為空的幾種辦法
本文地址:
Unity C 判斷字串為空的幾種用法
自csdn freeson 字串判斷 string在c 中是一個引用型別,但其又具有一定的特殊性。我們在使用string時,往往會把 變數值為空的字串物件 和 變數值為空字元的字串物件 搞混。因為string是我們開發過程使用最頻繁的型別之一,對於字串為空的判斷方法總結如下 一般對於判斷字串是否為空...
c 中判斷物件為空的幾種方式(字串等)
1 先了解幾個與空型別相關的關鍵字和物件 null 關鍵字表示不引用任何物件的空引用,它是所有引用型別變數的預設值,在 2.0版本之前也就只有引用變數型別可以為 null,如 string a null 但在c 2.0 版本之後,net也引入了可以為 null 的值型別,但變數在定義的時候方式有所不...
c 中判斷物件為空的幾種方式(字串等)
1 先了解幾個與空型別相關的關鍵字和物件 null 關鍵字表示不引用任何物件的空引用,它是所有引用型別變數的預設值,在2.0版本之前也就只有引用變數型別可以為null,如 string a null 但在c 2.0版本之後,net也引入了可以為null的值型別,但變數在定義的時候方式有所不同,如 i...
C 判斷字串為空的幾種方法和效率判斷
c 判斷字串為空的幾種方法和效率判斷 string定義 1.1 string str1 會定義指標 棧 並在記憶體裡劃一塊值為空的儲存空間 堆 指標指向這個空間。1.2 string str2 string.empty 同上。但是這是個靜態方法,不會反覆的重複申請記憶體,要優於1中的方式。1.3 s...
C 中判斷字串為空的幾種方法的比較
字串判斷 string在c 中是一個引用型別,但其又具有一定的特殊性。我們在使用string時,往往會把 變數值為空的字串物件 和 變數值為空字元的字串物件 搞混。所以經常會因為對此理解不深引起好多問題,因為string是我們開發過程使用最頻繁的型別之一,對於字串為空的判斷方法,通過對網上資料的整理...
幾種判斷素數的辦法。
1 最基本素數判定方法大家熟悉,只用看看2到n 或n的平方根 之間有沒有n的約數 include void main 此方法適用於判定較少數,資料量大時會超時。2 篩選法求素數也重要的求素數方法之一。這種方法主要用於打素數表,如求出n之內的所有素數,其思路是從1開始遇到一個素數就標記一下,並去掉n之...
字串為空判斷
1.匯入dependency org.apache.commonsgroupid commons lang3artifactid dependency 2.isempty 判斷某字串是否為空,為空的標準是str null或str.length 0 stringutils.isempty null t...
判斷字串為空的正確寫法
如果判斷一個字串是否為空?一不小心判斷錯了,就報出了空指標異常,著實是頭疼。一個string型別的變數str,如何判空哪?str null str.length 0 還是 str.length 0 str null?首先,對於一個變數判斷是不是空,要先判斷這個物件存不存,是不是在記憶體中分配了一塊區...
java判斷字串為空
判斷字串為空在很多場合中用到,方法也很多,下面簡單介紹下。1.在沒有其他工具類的情況下,先判斷是不是null然後再判斷長度。public static void checkstring string str if str null str.length 0 2.下面使用了commons lang3....
OC 判斷字串為空
判斷字串為空 看似簡單的問題,有人會說不就使用 string isequaltostring 或者更簡單的string.text nil就行了嘛。但是並沒有考慮到其中存在的一些問題,例如當字串中存在空格或者換行時或者當請求後臺資料時得到的是進行json解析的時候,如果解析出的nsdictionary...