CLR via C# 字符 System.Char

在.NET Framework中,字符总是表示成16位Unicode代码值,这简化了国际应用程序的开发。每个字符都是System.Char结构(一个值类型)的实例。System.Char类型很简单,提供了两个公共只读常量字段:MinValue和MaxValue。

为Char的实例调用静态GetUnicodeCategory方法返回System.Globalization.UnicodeCategory枚举类型的一个值,表明该字符是由Unicode标准定义的控制字符、货币字符、小写字母、大写字母、标点符号、数学符号还是其他字符。

CLR via C# 字符 System.Char_第1张图片

为了简化开发,Char类型还提供了几个静态方法,包括IsDigit、IsLetter、IsUpper、IsLower、IsPunctuation、IsLetterOrDigit、IsControl、IsNumber、IsSeparator、IsSurrogate、IsLowSurrogate、IsHighSurrogate和IsSymbol等。大多数都在内部调用了GetUnicodeCategory,并简单地返回true或false。注意,所有这些方法要么获取单个字符作为参数,要么获取一个string以及目标字符在这个string中的索引作为参数。

另外,可调用静态方法ToLowerInvariant或者ToUpperInvariant,以忽略语言文化(culture)的方式将字符转化为小写或大写形式。另一个方案是调用ToLower和ToUpper方法来转换大小写,但转换时会使用与调用线程关联的语言文化信息(System.Threading.Thread.CurrentThread.CurrentCulture)。也可以向这些方法传递CultureInfo类的实例来指定一种语言文化。oLower和ToUpper之所以需要语言文化信息,是因为字母的大小写转换时一种依赖于语言文化的操作。

除了这些静态方法,Char类型还有自己的实例方法。其中,Equals方法在两个Char实例代表同一个16位Unicode码位的前提下返回true。CompareTo方法返回两个Char实例的忽略语言文化的比较结果。ToString方法返回包含单个字符的一个string。

CLR via C# 字符 System.Char_第2张图片

最后,可以使用三种技术实现各种数值类型与Char实例的相互转换。下面按照优先顺序列出这些技术。

1.转型(强制类型转换)

将Char转换成数值(比如Int32)最简单的办法就是转型。这是三种技术中效率最高的,因为编译器会生成中间语言(IL)指令类执行转换,而不必调用方法。此外,有的语言(比如C#)允许转换时是使用checked还是unchecked代码。

2.使用Convert类型

System.Convert类型提供了几个静态方法来实现Char和数值类型的相互转换。所有这些转换都以checked方式执行,发现转换将造成数据丢失就抛出OverflowException异常。

3.使用IConvertible接口

Char类型和FCL中的所有数值类型都实现了IConvertible接口。该接口定义了像ToUInt16和ToChar这样的方法。这种技术效率最差,因为在值类型上调用接口方法要求对实例进行装箱---Char和所有数值类型都是值类型。如果某个类型不能转换(比如Char转换成Boolean),或者转换将造成数据丢失,IConvertible的方法会派出System.InvalidCastException异常。注意,许多类型(包括FCL的Char和数值类型)都将IConvertible的方法实现为显式接口成员。这意味着为了调用接口的任何方法,都必须先将实例显式转型为一个IConvertible。IConvertible的所有方法(GetTypeCode除外)都接受对实现了IFormatProvider接口的一个对象的引用。如果转换时需要考虑语言文化信息,该参数就很有用。但大多数时候都可以忽略语言文化,为这个参数传递null值。

CLR via C# 字符 System.Char_第3张图片

 

你可能感兴趣的:(CLR,via,C#,学习笔记)