.Net Framework开发环境帮助我们提供了一个功能非常强大的编写平台。我们在这篇文章中为大家详细介绍一下有关.Net Framework文本处理的相关操作,希望大家可以具体了解其中的应用技巧。#t#
数值和Char实例之间进行转换:
转型:效率***,编译器会直接产生IL指令来执行转换,不会有任何方法的调用;
但缺点是编译器要将期望转换的数值类型看作是基元类型。//c=(Char) 65;
使用Convert类型:System.Convert类型提供了静态方法,为checked操作
//c=Convert.ToChar(65);
.Net Framework文本处理中使用Iconvertible接口:Char类型和所有.NET框架类库FCL中的数值类型都实现了
Iconvertible接口,该接口定义了如ToChar这样的方法;但效率不高,存在值类型转化为接口装箱问题 //c=((IConvertible)65).ToChar(null);
C#认为String是一个基元类型,不能用new操作符来创建String对象。
- String s=”Hi there”;
- String file=”C:""Windows”;
- String file=@”C:"Windows”;
- //@符号告诉编译器该字符串为一个
字面字符串,可读性强
String对象最重要的特性是其恒定性。也就是说,一个字符串一旦被创建,就不可能再将其变长、变短、或者改变其中任何的字符。
.Net Framework文本处理中的编译器一般将文本常量字符串放在托管模块的元数据中,然后在运行时使用一种称作字符串驻留string interning的机制访问它们。
- String s=”Hello”;
- Console.WriteLine(Object.
ReferenceEquals(“Hello”,s);
//当***个引用字符串的方法被JIT编译时,所有嵌入在源代码中的文本常量字符串总会被添加到CLR内部的散列表中
运行时动态创建字符串:
- String s1=”Hello”;
- Sting s2=”Hel”;
- String s3=s2+”lo”;
- Console.WriteLine(Object.
ReferenceEquals(s1,s3));
//返回false,因为动态创建的字符串并没有添加到CLR内部的散列表中
如果一个应用程序中所有的字符串比较都仅仅是比较引用而非字符集,且有一种.Net Framework文本处理方法可以将含有相同字符集的动态字符串变为托管堆中的一个字符串对象,则将大大提高系统性能。
S3=String.Intern(s3); //返回已经存在的string对象的引用,如找不到,则该字符串将被添加到CLR内部的散列表中
S3=String.IsInterned(s3); //找不到,返回null
只有当我们需要在应用程序中多次比较同一个字符串时,才运用字符串驻留技术。
字符串池技术string pooling:将多次出现的字符串只写入一次到托管模块的元数据中
由于string类型表示的是一个恒定不变的字符串,FCL提供了另外一种类型System.Text.StringBuilder,允许我们通过对字符串和字符执行动态操作来创建String对象。
System.Object中定义了一个共有的无参ToString方法,我们可以在任何类型的实例上通过调用ToString来获得该实例的字符串表达形式。
如果需要自己的类型为调用者提供格式和语言文化选择的话,我们应是其实现System.Iformattable接口:
- Public interface Iformattable{
- String ToString(String
format,IformatProvider
formatProvider);- }
将多个对象格式化为一个字符串:
- String s=String.Format
(“On {0:D},{1} is {2:E}
years old.”,DateTime.Now,
”Wallace”,35);- Console.WriteLine(s);
//String的静态方法Format接受一个格式化字符串,给格式字符串使用大括号中的数字来标识可替换的参数。
StringBuilder的AppendFormat方法是我们能够以任何期望的方式来格式化对象
.Net Framework文本处理中的任何能够解析一个字符串的类型都提供有一个名为Parse的共有静态方法,该方法接受一个String,返回一个类型的实例。