• 微软原版系统

  • 一键重装系统

  • 纯净系统

  • 在线技术客服

魔法猪系统重装大师 一键在线制作启动 U 盘 PE 系统 用一键重装的魔法拯救失去灵魂的系统
当前位置:首页 > 教程 > 电脑教程

.net中直接修改临时字符串

时间:2015年04月02日 15:32:03    来源:魔法猪系统重装大师官网    人气:5626

有时候我们需要对字符串进行修改,但是.net里面的字符串是只读的,修改动作会产生一个新的字符串,多数时候这都不是我想要的结果。不过fixed还是可以帮我们解决一部分问题的,比如.ToLower、.ToUpper、.Replace(char, char)等等,不过有个限制,就是变换前后的字符串长度不变。

        public unsafe static string toLower(this string value)
        {
            if (value != null)
            {
                fixed (char* valueFixed = value) toLowerUnsafe(valueFixed, valueFixed + value.Length);
            }
            return value;
        }
        public unsafe static void toLower(char* start, char* end)
        {
            if (start != null && end > start) toLowerUnsafe(start, end);
        }
        public unsafe static void toLowerUnsafe(char* start, char* end)
        {
            while (start != end)
            {
                if ((uint)(*start - 'A') < 26) *start |= (char)0x20;
                ++start;
            }
        }

        public unsafe static string toUpper(this string value)
        {
            if (value != null)
            {
                fixed (char* valueFixed = value) toUpperUnsafe(valueFixed, valueFixed + value.Length);
            }
            return value;
        }
        public unsafe static void toUpper(char* start, char* end)
        {
            if (start != null && end > start) toUpperUnsafe(start, end);
        }
        public unsafe static void toUpperUnsafe(char* start, char* end)
        {
            while (start != end)
            {
                if ((uint)(*start - 'a') < 26) *start -= (char)0x20;
                ++start;
            }
        }

        public static string replace(this string value, char oldChar, char newChar)
        {
            return value != null && value.Length != 0 ? replaceUnsafe(value, oldChar, newChar) : null;
        }
        public unsafe static string replaceNotNull(this string value, char oldChar, char newChar)
        {
            return value.Length != 0 ? replaceUnsafe(value, oldChar, newChar) : value;
        }
        public unsafe static string replaceUnsafe(this string value, char oldChar, char newChar)
        {
            fixed (char* valueFixed = value)
            {
                char* start=valueFixed, end = valueFixed + value.Length;
                char endValue = *--end;
                *end = oldChar;
                do
                {
                    while (*start != oldChar) ++start;
                    *start = newChar;
                }
                while (start++ != end);
                if (endValue != oldChar) *end = endValue;
            }
            return value;
        }

Release实测,效果还不错,英文大小写转换运行时间降到了.ToLower与.ToUpper的1/4以下,字符替换运行时间降到了.Replace(char, char)的1/5以下,同时给垃圾回收也减少了很多压力。当然.ToLower与.ToUpper还是比较强大的,它不仅仅只是英文转换,但是我个人只处理过英文大小写问题。
需要注意的是,这里是直接修改字符串的数据,会影响到所有相关引用,如果对影响程度没有把握,一般建议应用在一次性的临时变量上。这里只是举几个例子,具体其它可能的字符串修改应用就需要你自己却发掘了。

.net,中,直接,修改,临时,字符串,有时候,我们,
栏目:电脑教程 阅读:1000 2023/12/27
Win7教程 更多>>
U盘教程 更多>>
Win10教程 更多>>
魔法猪学院 更多>>

Copyright © 2015-2023 魔法猪 魔法猪系统重装大师

本站发布的系统仅为个人学习测试使用,请在下载后24小时内删除,不得用于任何商业用途,否则后果自负,请支持购买微软正版软件。

在线客服 查看微信 返回顶部