C#的字符串类型是string,全称是System.String,属于不可变类型。
逐字字符串字面量
在C#中,可以在字符串前面加@符号表示转义序列不被处理,结果是一个逐字字符串字面量,它不仅将反斜杠当作普通字符串输出,还会逐字解释所有空白字符(空白原样输出),如果不使用@这串代码甚至都不能成功编译。
1 2 |
string a = "11111"; Console.WriteLine($@"sdhfjsdhfjkdshfjksdhfjksd{a} dfsfsd'm'm'm'm\n\n\n\n\n\n\n\n\n\n\n\n"); |
这串代码会将\n换行符一起输出出来,没有@则当作换行符输出。
在以@开头的字符串中,唯一支持的转义序列是"",它代表一个双引号,这个双引号不会终止字符串。
字符串插值
在上面的代码中字符串前面还有一个$符号,这叫字符串插值,可以在一个字符串前面加$符号,然后将表达式嵌入大括号中。
字符串插值是调用string.Format()方法的简写,例如上面的代码可以写成这样。
1 |
Console.WriteLine(string.Format(@"sdhfjsdhfjkdshfjksdhfjksd{0} dfsfsd'm'm'm'm\n\n\n\n\n\n\n\n\n\n\n\n", a)); |
这样做避免了通过字符串引入的任何后编译代码注入攻击。
using static指令
目前静态方法的调用通常是包含一个命名空间的前缀后面跟类型名,例如当调用System.Console.WriteLine()时,即使调用的方法是WriteLine(),在上下文中并没有其他的方法使用这个方法名,依然必须在方法名之前使用命名空间System后面跟类型名Console,有时候为了避免这样的显示写法,也希望有简写的方式,我们就可以引入C#6.0新增的using static指令。
1 |
using static System.Console; |
1 2 |
string a = "11111"; WriteLine($@"sdhfjsdhfjkdshfjksdhfjksd{a} dfsfsd'm'm'm'm\n\n\n\n\n\n\n\n\n\n\n\n"); |
using static指令必须放在文件的最开始,以后每次使用System.Console类的时候就不需要写前缀了,只需要写简单的方法名即可。
需要注意的是using static指令只对静态方法和属性有效,对于实例成员不起作用!
using指令与using static类似,不同的是using指令在文件或者命名空间中应用非常普遍,无论是实例化,还是静态方法的调用,使用using都可以随意的省略所有的命令空间引用。
换行符
如果不准备在控制台输出,可以使用System.Environment.NewLine
字符串长度
可以使用string的length只读属性来获得字符串的长度,不能设置它,它也不需要传任何参数。
字符串不可变
你可以为string新赋一个值,但是不能修改它的内容,所以不可能将string小写内容直接转换大写,而需要一个新string来接受这个转换的字符串
1 2 3 4 5 |
static void Main(string[] args) { string a = "AAssssDDDD"; Console.WriteLine(a.ToUpper()); } |
表面上看a.ToUpper()似乎将a变量中的小写转换成大写,但其实由于string类型不可变,所以a.ToUpper()不会进行这样的修改,a.ToUpper()会返回一个新的字符串,它需要保存到变量中或者直接传给Console.WriteLine();
评论