标签:存在 == 原则 逗号 framework builder 数字 测试 换算
为了提高性能和保证执行效率,.Net Framework维护了一个字符串池(暂存池、常量池),用以对使用过的字符串进行缓存。当为字符串类型的变量赋值时,此值同时被放入常量池中,在以后需要创新新的字符串时,CLR会首先检查池中是否存在相同值的字符串对象,如果存在,就将变量指向池中已经存在的对象,那么旧的对象又得以重用了,这个过程称为“字符串驻留”。而常量池缓存字符串对象的原则是:直接出现在代码中的字符串都会被放入“常量池”,而动态创建的字符串对象并不会被放入。可使用string.IsInterned(string)进行测试。
为了某些情况下效率低下的问题,比如在循环中改变字符串的值,可以使用StringBuilder类以提高效率,
将StringBuilder和String类对比,String值的追加操作每次都会分配新的内存,而StringBuilder仅当StringBuilder对象缓冲区太小以至于无法容纳新数据时才分配内存。因此,当字符串追加操作并不多时,最好还是使用String类。但如果需要任意多次追加字符串,例如在一个循环中,使用StringBuilder类比使用String类性能更高。尽管StringBuilder有着诸多好处,但创建一个StringBuilder实例比创建一个String实例需要花费更多的内存资源,因此使用StringBuilder也是要讲场合的。
格式化字符串:
{index[,alignment][:formatString]}
index,参数说明符,从零开始的整数,可标识对象列表中对应的项。如果由参数说明符指定的对象是空引用,则格式项将被字符串“”替换
alignment,可选参数,指示包含格式化值的区域的最小宽度。如果格式化值的长度小于alignment,则用空格填充该区域。如果alignment为负,则格式化的值将在该区域中左对齐;如果alignment为正,则格式化的值将右对齐。如果没有指定alignment,则该区域的长度为格式化值的长度。如果指定alignment,则需使用逗号。
formatString,可选的格式说明符字符串。如果相应对象是数值,则指定“数字格式字符串”,如果相应对象是DateTime对象,则指定“日期和时间格式字符串”,或者如果相应对象是枚举值,则指定“枚举格式字符串”。如果不指定“格式字符串”,则对数字、日期和时间或者枚举类型“使用常规(G)格式说明符”。如果指定“格式说明符”,则需要使用冒号。
如果需要在格式化字符串中使用花括号,必须使用连续两个花括号的形式“{{...}}”
格式数值型数据可以使用“标准数字格式字符串”和自定义数字格式字符串“,”标准数字格式字符串“的格式为”格式说明符+精度说明符“,如”N1“,表示精度为1的数字格式(小数点后1位)
|格式字符|说明|格式字符|说明|
| --------- | -------- | -----: | --: |
|G/g|常规格式|N/n|数字格式|
|C/c|货币格式|P/p|百分比格式|
|D/d|十进制格式|R/r|往返格式|
|E/e|科学计数(指数)格式|X/x|十六进制格式|
|F/f|固定点格式| | |
自定义数字格式字符串
|格式说明符|说明|
| --------- | -------- |
|0|零占位符|
|#|数字占位符|
|.(点号)|小数点|
|,(逗号)|千位分隔符和数字比例换算|
|%|百分比点位符|
|E0、E+0、E-0、e0、e+0、e-0|科学记数法|
||转义符|
|‘ABC’、”ABC“|字符串|
|;(分号)|部分分隔符|
|其他|所有其他字符|
Double myDouble = 1234567890;
int myInt = 42;
Console.WriteLine(string.Format(”{0:(###) ### - ####}“, myDouble)); // (123) 456 - 7890
Console.WriteLine(string.Format(”{0:My Number = #“, myInt)); // My Number = 42
”“
这里有一篇写得比较详细的博文,可供参考。
标签:存在 == 原则 逗号 framework builder 数字 测试 换算
原文地址:https://www.cnblogs.com/home-wang/p/10971414.html