惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Attack and Defense Labs
Attack and Defense Labs
The GitHub Blog
The GitHub Blog
C
Check Point Blog
博客园_首页
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
F
Full Disclosure
Microsoft Security Blog
Microsoft Security Blog
爱范儿
爱范儿
Recent Announcements
Recent Announcements
阮一峰的网络日志
阮一峰的网络日志
G
GRAHAM CLULEY
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Threat Research - Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
V
Vulnerabilities – Threatpost
K
Kaspersky official blog
博客园 - 司徒正美
S
Schneier on Security
T
The Exploit Database - CXSecurity.com
Project Zero
Project Zero
云风的 BLOG
云风的 BLOG
Cisco Talos Blog
Cisco Talos Blog
Know Your Adversary
Know Your Adversary
雷峰网
雷峰网
V
V2EX - 技术
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Spread Privacy
Spread Privacy
罗磊的独立博客
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security Affairs
SecWiki News
SecWiki News
Schneier on Security
Schneier on Security
O
OpenAI News
Jina AI
Jina AI
PCI Perspectives
PCI Perspectives
Cyberwarzone
Cyberwarzone
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog RSS Feed
I
InfoQ
D
Docker
P
Palo Alto Networks Blog
Recorded Future
Recorded Future
M
MIT News - Artificial intelligence
博客园 - Franky
B
Blog
Scott Helme
Scott Helme
博客园 - 叶小钗
D
DataBreaches.Net

博客园 - strayromeo

windows下创建文件夹链接 windows的虚拟磁盘(vhd,vhdx)使用 备注下Windows可能会用到的运行命令 SQL2008R2 收缩数据库问题 - 日志文件不变小 转:SQL Server服务器名称与默认实例名不一致的修复方法 mac下初始化eclipse的安卓开发ndk开发环境 eclipse android ndk 提示Type 'JNIEnv' could not be resolved 等信息解决办法 eclipse ndk 配置和简单开发demo ubuntu15.10运行android studio出错unable to run mksdcard sdk tool Pavilion M4-1016TX 加装固态硬盘(SSD)+UEFI+GPT安装WIN8.1 redis 内存库设置 教你怎么解决64位Windows版Redis狂占C盘的问题. MSSQL数据库分区表 如何将桌面的路径定义到其它盘符,如d:\users\桌面 - strayromeo - 博客园 sqlserver数据库脱机时发生异常:由于无法在数据库 'SMS' 上放置锁,ALTER DATABASE 失败。请稍后再试。 ALTER DATABASE 语句失败。 (.Net SqlClient Data Provider) JAVA代码反编译笔记 SQLServer—系统中的内存配置 .net remoting 客户端与服务端绑定事件,一部电脑当服务器,另一部当客户端,发布后没法接收远程错误信息。 Java Socket 模拟HTTP请求 Windows 7 IIS (HTTP Error 500.21 - Internal Server Error)解决
HString类替代系统string,内部采用StringBuilder拼接,减少string+操作时对象的创建。
strayromeo · 2013-05-02 · via 博客园 - strayromeo

如题,HString类结构如下:

      /// <summary>
      /// HString类替代系统string,
    /// 内部采用StringBuilder拼接,减少string+操作时对象的创建。
    /// </summary>
    public class HString
    {
        /// <summary>
        /// 内部StringBuilder变量
        /// </summary>
        private StringBuilder builder = null;

        /// <summary>
        /// 默认无参数构造函数
        /// </summary>
        public HString()
        {
            if (builder == null)
            {
                builder = new StringBuilder();
            }
        }

        /// <summary>
        /// 带string参数的构造函数
        /// </summary>
        public HString(string v)
            : this()
        {
            builder.Append(v);
        }

        /// <summary>
        /// 将string对象隐式转换为HString对象
        /// </summary>
        public static implicit operator HString(string v)
        {
            return new HString(v);
        }

        /// <summary>
        /// 将HString对象隐式转换为字符串
        /// </summary>
        public static implicit operator string(HString v)
        {
            return v.ToString();
        }

        /// <summary>
        /// HString + string方式
        /// </summary>
        public static HString operator +(HString hs, string v)
        {
            if (string.IsNullOrEmpty(v) == false)
            {
                hs.builder.Append(v);
            }
            return hs;
        }
        /// <summary>
        /// string + HString方式
        /// </summary>
        public static HString operator +(string v, HString hs)
        {
            if (string.IsNullOrEmpty(v) == false)
            {
                hs.builder.Insert(0, v);
            }
            return hs;
        }

        /// <summary>
        /// object + HString方式
        /// </summary>
        public static HString operator +(object v, HString hs)
        {
            if (v != null)
            {
                hs.builder.Insert(0, v);
            }
            return hs;
        }

        /// <summary>
        /// HString + object方式
        /// </summary>
        public static HString operator +(HString hs, object v)
        {
            if (v != null)
            {
                hs.builder.Append(v);
            }
            return hs;
        }

        /// <summary>
        /// 追加格式化字符串
        /// </summary>
        public void AppendFormat(string format, params object[] args)
        {
            if (args != null && args.Length > 0)
            {
                builder.AppendFormat(format, args);
            }
        }

        /// <summary>
        /// 重载对象的默认ToString方法输出拼接字符
        /// </summary>
        public override string ToString()
        {
            return builder.ToString();
        }
    }


使用代码:

            HString str = "test";
            HString str = new HString();
            HString str = new HString("test");
str += "xxx";
string res = str;
Console.WriteLine(res);
Console.WriteLine(str);