国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

CLR via C#

2019-11-17 03:18:59
字體:
來源:轉載
供稿:網友

CLR via C# - Char_String

.NET中Char表示為16為的Unicode值,Char提供兩個public const字段MinValue('/0',寫成'/u0000'也是一樣的)和MaxValue('/uffff').

Char.GetUnicodeCategory(char實例)來返回char所屬的unicode類型,返回System.Globalization.UnicodeCategory枚舉之一

'/0'的category為Control,所有類別如下

 1 Console.WriteLine("All Categories:"); 2             Enum.GetNames(typeof(System.Globalization.UnicodeCategory)).ToList().ForEach(Console.WriteLine); 3             /* 4             All Categories: 5                 UppercaseLetter 6                 LowercaseLetter 7                 TitlecaseLetter 8                 ModifierLetter 9                 OtherLetter10                 NonSpacingMark11                 SpacingCombiningMark12                 EnclosingMark13                 DecimalDigitNumber14                 LetterNumber15                 OtherNumber16                 SpaceSeparator17                 LineSeparator18                 ParagraphSeparator19                 Control20                 Format21                 Surrogate22                 PRivateUse23                 ConnectorPunctuation24                 DashPunctuation25                 OpenPunctuation26                 ClosePunctuation27                 InitialQuotePunctuation28                 FinalQuotePunctuation29                 OtherPunctuation30                 MathSymbol31                 CurrencySymbol32                 ModifierSymbol33                 OtherSymbol34                 OtherNotAssigned35              */
View Code

當然那個枚舉里面木有中文啊,像下面漢字直接顯示為Other Letter

char提供一系列靜態方法,IsControl IsLetter IsNumber等等,內部都是調用GetUnicodeCategory來的,由于我們不能修改.NET程序集,我們可以給char結構加上擴展方法IsChineseCharacter。目前常見的中文匹配范圍為4E00-9FA5,可以為Char寫個擴展方法來判斷

 1 /// <summary> 2         /// 是否是中文字符 3         /// </summary> 4         /// <param name="this"></param> 5         /// <returns></returns> 6         public static bool IsChineseCharacter(this char @this) 7         { 8             var low = '/u4E00'; 9             var high = '/u9FA5';10             return @this.Between(low,high);11         }12 13         //betwen如下14         /// <summary>15     /// 當前值,介于兩參數之間16     /// </summary>17     /// <typeparam name="T">值類型</typeparam>18     /// <param name="current">當前值</param>19     /// <param name="low">低檔值</param>20     /// <param name="high">高檔值</param>21     /// <returns>介于兩者之間</returns>22     public static bool Between<T>(this T current,T low,T high)23         where T : IComparable<T>24     {25         //compare方法,26         //小于 <027         //等于 =028         //大于 >029         return current.CompareTo(low) * current.CompareTo(high) <= 0;30     }
View Code

Char的大小寫轉換.Invariant是固定的,不變的,ToUpperInvariant以一種忽略文化的方式轉換大小寫,ToUpper ToLower會從System.Threading.Thread.CurrentThread.CurrentCulture獲取文化地區相關的信息

轉換

1.強制類型轉換:編譯器會生成IL指令來執行轉換,效率最高,還可以指定checkd和unchecked,例如可以unchecked((char)(65535+65)),大寫的A

2.System.Convert類,一堆靜態方法,總是以checked方式來轉換

3.IConvertible接口,效率最差,在值類型上調用接口方法要求裝箱,強制轉換成IConvertible接口來調用,IConvertible接口是顯示實現的

字符串

1.構造

string s="Hello World!";

string snew=new String("Hello World!");//這種方法是不允許的

在IL指令中,newobj用于new Object,對于string有特殊的指令ldstr,編譯時string會被嵌入到程序集元數據,從元數據中load

對于string s="strpart1 "+" "+"strpart2";這樣的所有字符串都是[直接量],編譯時會將他們連成一個字符串嵌入元數據.字符串是在托管堆上分配的

2.字符串 是不可變的(immutable),對于字符串的任何改變都不會影響原來的字符串(PS:曾經初學的時候遇到坑,各種查錯...),返回新構建的字符串,這種會造成很多的string垃圾

字符串留用,內部hashtable,對于同一個string只存放一個,例如string s1="hello",s2="hello";s1=String.Intern(s1);s2=String.Intern(s2),這時候s1和s2的referenceEqual為true,也就是指向了同一對象...C#編譯器都不用這個了,CLR via C#書上也就這么講,如果編程工作因string太多影響程序效率可以再研究研究

3.字符串比較

又是方法 & 文化特性那些

方法equals compare startwith endwith等,里面有一個StringComparison comparisonType參數

StringComparison枚舉:

CurrentCulture InvariantCulture Oridinal以及他們的IgnoreCase版本

Invariant:前面說過,不變的,固定的Culture,就是沒有一種具體的語言文化

Oridinal:順序的,依次的,書上叫 序號比較,執行字符串比較最快

Summary:InVariant在處理向用戶展示的數據時不用,Equal默認用的是Oridinal,CompareTo默認依賴Culture,非Oridinal會將字符串展開(在其他語言里面的某些字母是幾個字母合起來的,只能不明覺厲)來比較.

CultureInfo

CurrentCulture:控制貨幣,日期等等

CurrentUICulture:控制UI界面的Culture

CultureInfo引用了一個SystemGlobalization.CompareInfo,包含Compare方法

查看String.CompareTo源碼可以看見,調用的是CompareInfo.Compare

4.StringBuilder

兩種情況下會在托管堆中分配新的對象

1.構建的字符串超了StringBuilder的Capcity

2.調用了ToString之后繼續修改


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临城县| 彭泽县| 蚌埠市| 高密市| 凌源市| 宝坻区| 渝中区| 汉沽区| 乡城县| 磴口县| 渝北区| 灵宝市| 阳高县| 门源| 尼勒克县| 静安区| 闽清县| 南郑县| 竹山县| 石屏县| 仙桃市| 镇原县| 嘉黎县| 济阳县| 江门市| 广灵县| 汽车| 高淳县| 曲周县| 黑山县| 太康县| 京山县| 文登市| 阿拉善左旗| 巩义市| 巴林右旗| 永仁县| 开阳县| 伊吾县| 万全县| 伊金霍洛旗|