CLR Via CSharp读书笔记(14):字符、字符串和文本处理
數字類型與字符相互轉換的三種技術:
Casting: 最優效率,因為編譯器產生IL指令來執行轉換。C#允許開發者指明checked或unchecked代碼以執行轉換。
使用System.Convert類型: 提供一些靜態方法執行轉換,所有這些方法以checked方式執行。拋出OverflowException異常。
使用IConvertible接口: 最缺乏效率的技術,因為在值類型上調用接口方法會產生裝箱。大多數類型顯示實現接口方法,這意味著調用接口方法之前,必須將實例顯示轉換為接口。除了GetTypeCode之外的所有方法接受實現了IFormatProvider接口的對象引用,從而允許提供culture信息。拋出System.InvalidCastException異常。
String s = "Hi" + " " + "there.";
編譯器在編譯時連接所有文字常量,然后僅放置一個string對象在模塊的元數據中。如果使用符號+連接非文字常量,連接發生在運行時,這會在垃圾回收堆上創建多個string對象。
逐字字符:
// Specifying the pathname of an application String file = "C:\\Windows\\System32\\Notepad.exe";// Specifying the pathname of an application by using a verbatim string String file = @"C:\Windows\System32\Notepad.exe";
immutable字符串提供了如下幾個好處:
允許在一個字符串上執行多個操作而沒有改變該字符串
immutable字符串同時意味著操作或者訪問字符串時沒有線程同步問題
允許CLR僅通過一個string對象共享多份相同String內容?
字符串留用
執行序號(ordinal)相等性檢查時,CLR快速測試兩個字符串是否包含相同數量的字符。如果答案是否定的,字符串肯定不相等。如果答案是肯定的,CLR還需要比較每個單獨的字符。
執行需要注意語言文化的比較時,CLR始終都要比較所有單獨的字符,因為兩個字符串即使長度不同,也可能是相等的。
雖然Intern方法本身比Equals方法塊,但在使用Intern方法時,應用程序的總體性能可能變得更慢。這是因為所有字符串在添加到wordlist數組時,都要花時間對其進行留用。如果應用程序需要使用同一個wordlist來多次調用Intern方法,則該方法會對應用程序的性能和內存利用造成不利影響。這正是C#編譯器默認不啟用字符串留用功能的原因。
字符串留用就是將字符串保存在一個哈希表里。
字符串操作:
String提供了許多用于處理字符串的靜態方法和實例方法,如Insert, Remove, PadLeft, Trim, Concat等。使用這些方法時請牢記一點,他們返回的都是一個新的字符串對象。這是由于字符串是不可變的,已經創建,便不能被修改。
?
?
轉載于:https://www.cnblogs.com/thlzhf/archive/2012/12/06/2805453.html
總結
以上是生活随笔為你收集整理的CLR Via CSharp读书笔记(14):字符、字符串和文本处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [资料]有关MS SQL 2000安全问
- 下一篇: 天底下最大的“骗子”——年龄