系统的法子就必定是最棒的

作者: 编程应用  发布:2019-09-28

引言

  后天又听到有些许人说,那几个类系统都有,直接用系统的就好了,难道你写的还也许会比系统的好?

  小编就难题了:同样是人写的代码,为啥系统的必然正是最佳的?

废话非常少,直接上代码

string.IsNullOrWhiteSpace(string value)

这些措施相信大家都十分的耳濡目染

唯独当有一天自身展开Reflector见到他的源码的时候小编就震撼了....

//string类public static bool IsNullOrWhiteSpace(string value){    if (value != null)    {        for (int i = 0; i < value.Length; i++)        {            if (!char.IsWhiteSpace)            {                return false;            }        }    }    return true;}//char类public static bool IsWhiteSpace(char c){    if (IsLatin1    {        return IsWhiteSpaceLatin1;    }    return CharUnicodeInfo.IsWhiteSpace;}private static bool IsLatin1(char ch){    return (ch <= 'x00ff');} private static bool IsWhiteSpaceLatin1(char c){    if (((c != ' ') && ((c < 't') || (c > 'r'))) && ((c != 'x00a0') && (c != 'x0085')))    {        return false;    }    return true;}//CharUnicodeInfo类internal static bool IsWhiteSpace(char c){    switch (GetUnicodeCategory    {        case UnicodeCategory.SpaceSeparator:        case UnicodeCategory.LineSeparator:        case UnicodeCategory.ParagraphSeparator:            return true;    }    return false;}public static UnicodeCategory GetUnicodeCategory(char ch){    return InternalGetUnicodeCategory;}internal static UnicodeCategory InternalGetUnicodeCategory(int ch){    return (UnicodeCategory) InternalGetCategoryValue(ch, 0);}internal static unsafe byte InternalGetCategoryValue(int ch, int offset){    ushort num = s_pCategoryLevel1Index[ch >> 8];    num = s_pCategoryLevel1Index[num + ((ch >> 4) & 15)];    byte* numPtr = (byte*) (s_pCategoryLevel1Index + num);    byte num2 = numPtr[ch & 15];    return s_pCategoriesValue[(num2 * 2) + offset];}

总结有8个相关的点子,用到的字段就不曾往向下探底索了

起码就char.IsWhiteSpaceLatin1那七个艺术最多的时候就需求看清5次

如此总结的三个主意为什么要如此复杂呢?

《C#中那些[易如反掌]的属性优化》笔者的这篇小说最后一节就是说关于char类型的拍卖

此地有一种空间换时间的优化措施, 虽说是空中换时间,不过事实上浪费的半空中不会点不清,因为char最八只有65536长短

采纳那或多或少,笔者完全能够协和完结二个

/// <summary> 指示空白字符的数组/// </summary>private static bool[] _WhiteChars = InitWhiteChars();/// <summary> 初始化 _WhiteChars/// </summary>/// <returns></returns>private static bool[] InitWhiteChars(){    var arr = new bool[char.MaxValue];    for (int i = char.MinValue; i <= char.MaxValue; i++)    {        if (char.IsWhiteSpace((char)i)) //如果字符是空白字符        {            arr[i] = true;//将字符对应数组的值设置为true        }    }    return arr;}/// <summary> 指示指定的字符串是 null、空还是仅由空白字符组成。/// </summary>/// <param name="str">要测试的字符串。</param>/// <returns></returns>public static bool IsNullOrWhiteSpace(this string str){    if (str == null)    {        return true;    }    var length = str.Length;    if (str.Length == 0)    {        return true;    }    if (_WhiteChars[str[0]] == false)    {        return false;    }    for (int i = 1; i < length; i++)    {        if (_WhiteChars[str[i]] == false)        {            return false;        }    }    return true;}

是的 ,没有错 ,就2个法子,当中二个依旧静态方法,全局只会实行一遍

推断的时候唯有二个数组索引取值的操作,假设抽出是true 就表达是空白字符...多么轻巧的逻辑啊

系统方法本人从不太深切的切磋..除非..CharUnicodeInfo.InternalGetCategoryValue 方法在运作中有非常的大可能率更动重回的结果,不然小编的不二诀窍将和系统方法的重回值是一律的

同理,再顺便写三个推断char的

/// <summary> 指示指定的 Unicode 字符是否属于空白类别。/// </summary>/// <param name="str">要计算的 Unicode 字符。</param>/// <returns></returns>public static bool IsWhiteSpace(this char value){    return _WhiteChars[value];}

后话

  刚学.net的时候,那时csdn还特别火,依稀记得,那时候在csdn论坛有多姿多彩的攻擂贴,当中就有那些挑衅系统方法的

  

  也正是在当年,作者驾驭了系统方法也究竟只是人写的,只假若人就势必存在人旁人

  本领正是汉代武学同样(作者常常把设计格局比作武术套路),所谓文无第一武无第二 ,说的正是武术的三六九等一比就清楚了,本领也是一致

  多学习,多钻研,多阅览,多测量检验. 真正把一个艺术,一个类搞懂,你当然就知道他的高低

  不要盲目标钦佩什么人,只假诺XXX就一定是最佳的! 凭本身N年的阅历,那样是最棒的! 都未有说服力! 都以程序员,大家拿代码说话

广告

  更多C#技巧调换,迎接加群:5946699;暗号:C#交流

  迎接喜欢C#,热爱C#,正在学习C#,计划上学C#的敌人来这里相互学习调换,共同进步

  群主即是自个儿,有非常态得以在群里@小编,大家一同切磋探讨

本文由金沙澳门官网送注册58发布于编程应用,转载请注明出处:系统的法子就必定是最棒的

关键词:

上一篇:没有了
下一篇:没有了