当前位置: 移动技术网 > IT编程>开发语言>.net > .NET Core C#中级篇2-5 常见实用类

.NET Core C#中级篇2-5 常见实用类

2019年08月25日  | 移动技术网IT编程  | 我要评论

三国兽焰,卧室样板间,硅藻泥施工技术

.netcore csharp 中级篇2-5

本节内容为常见实用类和方法的使用

string.format

string.format方法是一个字符串格式化类,它里面的一些写法是对字符串进行指定格式的转换。

string.format 方法的几种定义:

  • string.format (string, object) 将指定的 string 中的格式项替换为指定的 object 实例的值的文本等效项。
  • string.format (string, object[]) 将指定 string 中的格式项替换为指定数组中相应 object 实例的值的文本等效项。
  • string.format (iformatprovider, string, object[]) 将指定 string 中的格式项替换为指定数组中相应 object 实例的值的文本等效项。指定的参数提供区域性特定的格式设置信息。
  • string.format (string, object, object) 将指定的 string 中的格式项替换为两个指定的 object 实例的值的文本等效项。
  • string.format (string, object, object, object) 将指定的 string 中的格式项替换为三个指定的 object 实例的值的文本等效项。

看起来挺抽象的,事实上string.format的写法有点类似于我们的正则表达式。我们着重的讲一下几个非常常用的用法。

数值格式化

字符 说明 示例 输出
c 货币格式化,后接数字为小数点位数 string.format("{0:c3}", 2) 获得当前设置的货币格式,例如$2.000或¥2.000
d 十进制,后接数字为向前填充0至n位 string.format("{0:d3}", 2) 002
x 输出对应的十六进制 string.format("{0:x000}", 12) c
g 常规输出 string.format("{0:g}", 2) 2
n 用分号隔开的数字 string.format("{0:n}", 250000) 250,000.00
自定义 自定义输出 string.format("{0:000.000}", 12.2) 012.200

值得注意的是,大括号括起来的是一个占位符,{0:}表示的是后接参数的第一个,{1:}则是第二个,作为一个占位符存在。

占位符

占位符分为以下两种:

  • 零占位符0:如果格式化的值在格式字符串中出现“0”的位置有一个数字,则此数字被复制到结果字符串中。小数点前最左边的“0”的位置和小数点后最右边的“0”的位置确定总在结果字符串中出现的数字范围。
    “00”说明符使得值被舍入到小数点前最近的数字,其中零位总被舍去。

  • 数字占位符#:如果格式化的值在格式字符串中出现“#”的位置有一个数字,则此数字被复制到结果字符串中。否则,结果字符串中的此位置不存储任何值。
    请注意,如果“0”不是有效数字,此说明符永不显示“0”字符,即使“0”是字符串中唯一的数字。如果“0”是所显示的数字中的有效数字,则显示“0”字符。 “##”格式字符串使得值被舍入到小数点前最近的数字,其中零总被舍去。

ps:空格占位符

string.format("{0,-50}", theobj);//格式化成50个字符,原字符左对齐,不足则补空格
string.format("{0,50}", theobj);//格式化成50个字符,原字符右对齐,不足则补空格

例如,用于固定区域性的自定义格式字符串为“dddd, dd mmmm yyyy”。

时间格式化

格式化时间非常简单,我们通常描述时间都是年-月-日 时:分:秒就够了,在string.format类中,我们取这些描述词的英文首字母作为格式化字符,例如1999-05-06我需要转换成国外常见的时间表达方式05/06/99,我们只需要

"1999-05-06".format("mm/dd/yy");

非常的简单。我们列举出一个表格详细的阐明常用时间格式化的字符
| 字符 | 说明 |详情
|:-:|:-:|:-:|
|d|短日期模式|表示由当前 shortdatepattern 属性定义的自定义 datetime 格式字符串。例如,用于固定区域性的自定义格式字符串为“mm/dd/yyyy”。
| d | 长日期模式 | 表示由当前 longdatepattern 属性定义的自定义 datetime 格式字符串。例如,“dddd, dd mmmm yyyy”。
|f|完整日期/时间模式(短时间)|表示长日期 (d) 和短时间 (t) 模式的组合,由空格分隔。
|f|完整日期/时间模式(长时间)|表示由当前 fulldatetimepattern 属性定义的自定义 datetime 格式字符串。例如,用于固定区域性的自定义格式字符串为“dddd, dd mmmm yyyy hh:mm:ss”。
|g|常规日期/时间模式(短时间)|表示短日期 (d) 和短时间 (t) 模式的组合,由空格分隔。
|g|常规日期/时间模式(长时间)|表示短日期 (d) 和长时间 (t) 模式的组合,由空格分隔。
|m 或 m|月日模式|表示由当前 monthdaypattern 属性定义的自定义 datetime 格式字符串。例如,用于固定区域性的自定义格式字符串为“mmmm dd”。
|t|短时间模式|表示由当前 shorttimepattern 属性定义的自定义 datetime 格式字符串。例如,用于固定区域性的自定义格式字符串为“hh:mm”。
|t|长时间模式|表示由当前 longtimepattern 属性定义的自定义 datetime 格式字符串。例如,用于固定区域性的自定义格式字符串为“hh:mm:ss”。
|y 或 y|年月模式|表示由当前 yearmonthpattern 属性定义的自定义 datetime 格式字符串。例如,用于固定区域性的自定义格式字符串为“yyyy mmmm”。

还有一些自定义的方法,例如我之前举的例子
| 字符 | 说明 |详情
|:-:|:-:|:-:|
|n个d|将月中日期表示为从 1 至 31 的数字。|n个d则是在时间有效位小于n时在前面加0
|n个m|将月表示为从 1 至 12 的数字。|n个d则是在时间有效位小于n时在前面加0
|n个y|表示年|n个y则是在时间有效位小于n时在前面加0,特别的,1个y也是使用年份后两位进行表示。
|n个s|将秒表示为从 0 至 59 的数字。|秒表示自前一分钟后经过的整秒数|n个s则是在时间有效位小于n时在前面加0
|n个m|将分表示为从 0 至 59 的数字。|分钟表示自前一小时后经过的整分钟数|n个m则是在时间有效位小于n时在前面加0
|n个h|将时表示为从 0 至 12 的数字。|自午夜或中午开始对整小时计数|n个h则是在时间有效位小于n时在前面加0
|n个h|将时表示为从 0 至 24 的数字。|自午夜或中午开始对整小时计数|n个h则是在时间有效位小于n时在前面加0
枚举格式字符串

格式字符串

字符 说明
g 或 g 如有可能,将枚举项显示为字符串值,否则显示当前实例的整数值。如果枚举定义中设置了 flags 属性,则串联每个有效项的字符串值并将各值用逗号分开。如果未设置 flags 属性,则将无效值显示为数字项。
f 或 f 如有可能,将枚举项显示为字符串值。如果值可以完全显示为枚举项的总和(即使未提供 flags 属性),则串联每个有效项的字符串值并将各值用逗号分开。如果值不能完全由枚举项确定,则将值格式化为整数值。
d 或 d 以尽可能短的表示形式将枚举项显示为整数值。
x 或 x 将枚举项显示为十六进制值。按需要将值表示为带有前导零,以确保值的长度最少有八位

datetime

datetime是c#时间处理的大杀器,它的效率非常高,显著的优于其他语言的时间处理,其中datetime类型重写了tostring()方法,在datetime的tostring方法里面,我们可以轻而易举的使用我们的格式化字符对它进行格式化。

事实上datetime结构并不是我们今天讲的主题,因为datetime的操作事实上就是我们的string.format操作,至多我们讲一下datetime和字符串的转换

符合时间格式的字符串转换成datetime结构只需要使用

datetime.parse(str);

我们这节主要讲解的是timespan时间计算类的使用,不过在datetime中也有部分函数用于时间计算,例如

  • add 将指定的timespan的值加到此实例的值上。
  • adddays 将指定的天数加到此实例的值上。
  • addhours 将指定的小时数加到此实例的值上。
  • addmilliseconds 将指定的毫秒数加到此实例的值上。
  • addminutes 将指定的分钟数加到此实例的值上。
  • addmonths 将指定的月份数加到此实例的值上。
  • addseconds 将指定的秒数加到此实例的值上。
  • addyears 将指定的年份数加到此实例的值上。
  • subtract 从此实例中减去指定的时间或持续时间。

    timespan

    下面的列表阐明了部分timespan的方法

  • add:与另一个timespan值相加。
  • days:返回用天数计算的timespan值。
  • hours:返回用小时计算的timespan值
  • milliseconds:返回用毫秒计算的timespan值。
  • minutes:返回用分钟计算的timespan值。
  • negate:返回当前实例的相反数。
  • seconds:返回用秒计算的timespan值。
  • subtract:从中减去另一个timespan值。
  • ticks:返回timespan值的tick数。
  • totaldays:返回timespan值表示的天数。
  • totalhours:返回timespan值表示的小时数。
  • totalmilliseconds:返回timespan值表示的毫秒数。
  • totalminutes:返回timespan值表示的分钟数。
  • totalseconds:返回timespan值表示的秒数。

stringbuilder

string对象是不可改变的,每次使用system.string类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。如果你需要经常操作字符串对象的话,直接使用string进行加减运算是很不划算的做法,这个时候,我们需要使用我们的stringbuilder类进行操作。

stringbuilder可以自由扩展大小,因为stringbuilder分配在堆区。

并且stringbuilder可以指定其大小,当指定分配大小之后,性能就会得到提升。在达到容量之前,它不会为其自己重新分配空间。如果超过指定大小系统会当前大小倍增,也就10,15,20。建议指定大小。

常用的几个方法

  • stringbuilder.append //将信息追加到当前stringbuilder的结尾。
  • stringbuilder.appendformat //用带格式文本替换字符串中传递的格式说明符。
  • stringbuilder.insert //将字符串或对象插入到当前stringbuilder对象的指定索引处。
  • stringbuilder.remove //从当前stringbuilder对象中移除指定数量的字符。
  • stringbuilder.replace //替换指定索引处的指定字符。

值得注意的一件事情是,对于c#,微软对于string类型有着特殊的优化,如果两个字符串内容相同,那么他们只会被创建一次,也就是说会指向同一块内存地址,并且,c#比较的方法有以下三种

  • ==它是比较的栈里面的值是否相等(值比较)
  • equals它比较的是堆里面的值是否相等(引用地址值比较)
  • object.referenceequals(obj1,obj2)它是比较的是内存地址是否相等

示例:

stringbuilder mystringbuilder = new stringbuilder("hello   world!",30);  
mystringbuilder.insert(6,"test");
mystringbuilder.append("test");

你只需要记住,在面对大量字符串的操作处理中,我们使用stringbuilder来提高我们的运算速度。

如果我的文章帮助了您,请您在github.netcoreguide项目帮我点一个star,在博客园中点一个关注和推荐。

github

bilibili主页

warrenryan'sblog

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网