开发过程中常用到的拼接字符串的方法有三种:

  1 简单 “+=” 拼接法

  

1
2
3
4
5
string str="a";
 
str+="c"+"d";
 
string str_1="a"+"b";

  

首先需要明白的是string类型,string是引用类型,保留在堆上,而不是栈上,用的时候传的是内存中的地址,每次修改就会重新创建一个新的string对象来存储字符串,原有的会被自动回收。

  第一种方式的实现原理,第一步先在内存中分配空间,存储str变量的对象,值为"a", “+=”时,又会重新创建一个对象来存储新的字符串(“abc"),把str指向这个新的地址。所以只有简单几步的拼写时,一般不会有太大问题,如果有时候需要循环拼接时,就会不断创建新的对象,很浪费性能和内存。

2 String.Format()

 

1
string str= String.Format("{0}{1}{2}","a","b","c");

  

  这就需要先看看他的源代码了,

1
2
3
4
5
6
7
public static String Format(IFormatProvider provider, String format, params Object[] args) <br>{
    if (format == null || args == null)
      throw new ArgumentNullException((format==null)?"format":"args");
    StringBuilder sb = new StringBuilder(format.Length + args.Length * 8);
    sb.AppendFormat(provider,format,args);
    return sb.ToString();
}

  可以看到是先创建一个StringBuilder类型的变量,长度为第一个参数的长度+参数长度的8倍。.Net自动分配一个比较大的容量来存储。StringBuilder的介绍请看第3种方法.

  这种方式的代码看起来比较整洁,易于月度,效率也比+=高效很多。

3 StringBuilder.Append

 

1
2
3
StringBuilder str=new StringBuilder();
 
str.Append("a");

  

StringBuilder 是预先创建一个比较大的内存,以后每次操作时判断容量上限是否不够用,如果不够用就自动把容量扩大一倍,修改的还是第一次创建的对象的值。

如果是简单的拼写时,可以用 "+=", string.format

循环内拼写很长的字符串时,就需要用到StringBuilder来节省性能和内存了。

c# 中 $符号的用法   C# 6.0的、、、VS 2015支持

C#中$的用法:是为了替代string.format();原先赋值需要占位符和变量,当需要拼接多个变量会造成语句过长等不易理解问题,$""是为了替代string.format(),可以把字符串中的C#变量{}包含起来达到识别C#变量的目的$"{id}";也支持表达式,使用$"{(你的表达式)}"

  1. var k = "a";
  2. var a0 = "User";
  3. var a1 = "Id";
  4. var a2 = 5;
  5. var ccc = string.Format("select * from {0} where {1} = {2}", a0, a1, a2);
  6. var ccb = $"select * from {a0} where {a1}={a2}";

当然也支持string.format()里面的格式,如:

    1. var k = "a";
    2. var k4 = $"{k,5}";
    3. var k3 = string.Format("{0,5}", k);
    4. var k2 = DateTime.Now;
    5. var c = $"{k2:yyyy}";
    6. c = string.Format("{0:yyyy}", k2);

C# 拼接字符串的几种方式和性能的更多相关文章

  1. Python拼接字符串的七种方式

    忘了在哪看到一位编程大牛调侃,他说程序员每天就做两件事,其中之一就是处理字符串.相信不少同学会有同感. 几乎任何一种编程语言,都把字符串列为最基础和不可或缺的数据类型.而拼接字符串是必备的一种技能.今 ...

  2. Python 拼接字符串的几种方式

    在学习Python(3x)的过程中,在拼接字符串的时候遇到了些问题,所以抽点时间整理一下Python 拼接字符串的几种方式. 方式1,使用加号(+)连接,使用加号连接各个变量或者元素必须是字符串类型( ...

  3. oracle 拼接字符串的两种方式

      方式一:使用管道符||进行拼接 方式二:使用concat()函数 区别: 方式一可以拼接多个字符串:方式二只能将2个字符串拼接到一起. 写在最后 哪位大佬如若发现文章存在纰漏之处或需要补充更多内容 ...

  4. 彻底了解构建 JSON 字符串的三种方式

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7701856.html 前言:JSON 是轻量级的数据交换格式,很常用,尤其是在使用 Ajax ...

  5. PHP定义字符串的四种方式

    1.简介 在PHP中这门语言中,因为是弱类型语言,因此使用变量时不需提前定义即可使用. 我们在使用php进行开发的时候,大多数使用双引号.单引号进行定义字符串.既然有这两种方式,那么他们之间肯定是有区 ...

  6. spring接收json字符串的两种方式

    一.前言 前几天遇到一个问题,前端H5调用我的springboot一个接口(post方式,@RequestParameter接收参数),传入的参数接收不到.自己测试接口时使用postman的form- ...

  7. C语言中存储多个字符串的两种方式

    C语言中存储多个字符串的两种方式 方式一    二维字符串数组 声明: char name[][] = { "Justinian", "Momo", " ...

  8. Golang拼接字符串的5种方法及其效率_Chrispink-CSDN博客_golang 字符串拼接效率 https://blog.csdn.net/m0_37422289/article/details/103362740

    Different ways to concatenate two strings in Golang - GeeksforGeeks https://www.geeksforgeeks.org/di ...

  9. Dynamics CRM2016 查询数据的三种方式的性能对比

    之前写过一个博客,对非声明验证方式下连接组织服务的两种方式的性能进行了对比,但当时只是对比了实例化组织服务的时间,并没有对查询数据的时间进行对比,那有朋友也在我的博客中留言了反映了查询的时间问题,一直 ...

随机推荐

  1. Elasticsearch 学习之 分片未分配原因

    分片未分配的原因主要有: 1)INDEX_CREATED:由于创建索引的API导致未分配.2)CLUSTER_RECOVERED :由于完全集群恢复导致未分配.3)INDEX_REOPENED :由于 ...

  2. MyBatis学习之SpringMvc和MyBatis整合

    1. 整合流程 Dao层: 1. SqlMapConfig.xml,空文件即可,需要文件头. 2. applicationContext-dao.xml. a) 数据库连接池 b) SqlSessio ...

  3. mysqlslap 压测工具使用说明

    PS:今天一同事问我有木有比较靠谱的mysql压力测试工具可用.其实mysql自带就有一个叫mysqlslap的压力测试工具,还是模拟的不错的.下面举例说说.mysqlslap是从5.1.4版开始的一 ...

  4. php strpos(), stripos(),strrpos(), strripos()的区别

    strpos(), 左边开始,字符出现第一个位置,区分大小写: stripos(),不区分大小写: strrpos(), 左边开始,字符出现,最后一个位置,区分大小写: strripos()不区分大小 ...

  5. 浅谈P2P、P2C 、O2O 、B2C、B2B、 C2C的区别

    相信有很多人对P2P.P2C .O2O .B2C.B2B. C2C不是很熟悉,甚至是云里雾里,每天看着这些常见又陌生的名词,如果有人跟你说 让你解释它的含义,金融的小伙伴们是不是瞬间石化了,尤其是做淘 ...

  6. POJ 1117 Pairs of Integers

    Pairs of Integers Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4133 Accepted: 1062 Des ...

  7. C语言程序设计--字符串与指针及数组与指针

    数组的基本知识 数组的定义 #define SIZE 5 int array_int[5]; //未声明初始化,默认填零 float array_float[5] = {1.01, 2.23, 3.1 ...

  8. 解决方案:CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\--”--“拒绝访问。 ”

    IIS部署的网站打开出现问题: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET F ...

  9. spring boot 通过Maven + tomcat 自动化部署

    使用maven创建的springboot项目,默认是jar包,springboot还有自己带的tomcat. 现在为了简单实现本地自动发布项目到服务器,需要通过发布war包的形式,通过maven将项目 ...

  10. React 生命周期介绍

    [组件生命周期] 一.理论 组件本质上是状态机,输入确定,输出一定确定 生命周期的三个阶段,三者时间是不固定的,只是在逻辑上的分类: 二.初始化阶段: getDefaultProps:获取实例的默认属 ...