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

首頁 > 編程 > C# > 正文

C# 判斷字符串為空的幾種辦法

2020-01-24 03:28:18
字體:
來源:轉載
供稿:網友

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);
進一步分析:
首先是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法來進行字符串判空串是有著很大的性能優勢的,尤其在進行大量字符串判空時!當然首先得判斷字符串實例是否為空引用!
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美另类在线观看| 欧美日韩国产页| 久久久久久久久久久免费| 在线激情影院一区| 欧美午夜美女看片| 国产精品吹潮在线观看| 日韩专区在线观看| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲性69xxxbbb| 日韩欧美精品在线观看| 欧美一级大片在线免费观看| 自拍偷拍亚洲一区| 欧美日韩色婷婷| 日韩亚洲欧美中文在线| 国产一区二区三区在线观看视频| 日韩在线播放av| 精品调教chinesegay| 欧美一级片久久久久久久| 亚洲欧美日韩综合| 久久艳片www.17c.com| 在线视频欧美性高潮| 精品国产一区二区三区久久狼5月| 久久久精品在线| 亚洲欧美日韩在线高清直播| 这里只有精品视频在线| 97精品伊人久久久大香线蕉| 日韩电影免费在线观看中文字幕| 欧美一区二区三区……| 久久99精品视频一区97| 国产一区二区三区久久精品| 日韩av在线不卡| 国产精品www| 久久精品国产亚洲一区二区| 国产精品第二页| 国产精品一区电影| 92裸体在线视频网站| 成人欧美一区二区三区黑人孕妇| 91精品视频在线播放| 精品无码久久久久久国产| 在线视频日本亚洲性| 欧美一级免费视频| 欧美激情视频网址| 日韩一区在线视频| 国产999在线观看| 久久成年人视频| 久久久久久久久久久国产| 亚洲а∨天堂久久精品9966| 久久久精品一区| 欧美精品国产精品日韩精品| 日韩美女在线观看一区| 久久精品中文字幕电影| 久久免费视频观看| 亚洲国产天堂久久国产91| 日韩影视在线观看| 欧美在线国产精品| 亚洲国语精品自产拍在线观看| 亚洲精品国产精品国自产观看浪潮| 亚洲少妇中文在线| 欧美另类99xxxxx| 欧美在线不卡区| 成人精品久久一区二区三区| 国产精品露脸自拍| 久久国产精品久久久久| 欧美成人免费在线视频| 亚洲精品国产综合久久| 97国产精品视频人人做人人爱| 亚洲综合成人婷婷小说| 国产成人一区二| 国产一区二区三区免费视频| 欧美小视频在线观看| 欧美乱大交做爰xxxⅹ性3| 日韩中文有码在线视频| 亚洲视频在线免费看| 91干在线观看| 亚洲韩国日本中文字幕| 成人精品网站在线观看| 久久久久久久国产精品| 国产区精品视频| 欧美激情欧美激情在线五月| 久久这里只有精品99| 日本一欧美一欧美一亚洲视频| 国产精品成久久久久三级| 69视频在线播放| 国产丝袜视频一区| 夜夜躁日日躁狠狠久久88av| 一区二区国产精品视频| 亚洲精品国产精品国自产在线| 日韩一区二区欧美| 亚洲国产高清自拍| 欧美劲爆第一页| 国产精品爽黄69天堂a| 伊人久久综合97精品| 成人午夜在线观看| 久久久久久久亚洲精品| 欧美性视频网站| 日本三级久久久| 日韩av在线导航| 欧美精品电影免费在线观看| 一区二区三区动漫| 韩国日本不卡在线| 中文字幕免费精品一区| 夜色77av精品影院| 97超碰蝌蚪网人人做人人爽| 日韩的一区二区| 日韩亚洲欧美中文在线| 欧美高跟鞋交xxxxhd| 亚洲自拍av在线| 欧美性69xxxx肥| 日韩电影中文字幕一区| 亚洲国产精品中文| 欧美精品一区二区三区国产精品| 日韩一二三在线视频播| 国产日韩欧美综合| 久久久久久国产精品美女| 日韩av在线免费播放| 精品久久久久久久大神国产| 日韩一区二区三区在线播放| 免费不卡在线观看av| 欧美亚洲国产视频小说| 成人妇女免费播放久久久| 久久久噜噜噜久久| 色老头一区二区三区| 69**夜色精品国产69乱| 亚洲一区www| 国产一区二区三区欧美| 精品国产依人香蕉在线精品| 亚洲精品av在线| 亚洲一区制服诱惑| 欧美洲成人男女午夜视频| 国产mv久久久| 欧美在线免费观看| 亚洲国产精品网站| 精品国产区一区二区三区在线观看| 97在线看免费观看视频在线观看| 亚洲激情在线观看视频免费| 日本亚洲欧洲色| 精品在线观看国产| 久久久国产视频91| 欧美日韩一区免费| 中文字幕不卡av| 精品亚洲一区二区三区| 亚洲美女动态图120秒| 91国产视频在线播放| 午夜精品理论片| 日韩在线视频免费观看| 九九九热精品免费视频观看网站| 精品夜色国产国偷在线| 欧美又大又粗又长| 日韩av综合网站| 国产日本欧美一区二区三区在线| 日韩人在线观看| 欧美成人亚洲成人| 综合国产在线观看| 国产精品18久久久久久首页狼| 欧美性在线观看| 97久久精品人人澡人人爽缅北| 亚洲国产精品久久久久久| 亚洲欧美国产另类| 成人精品视频99在线观看免费| 欧美黄色片视频| 国产欧美一区二区三区视频| 精品亚洲aⅴ在线观看| 亚洲国产成人精品久久| 色偷偷9999www|