一、字元串 通過string定義一個字元串,或者通過String類來創建對象。 通過new String() 創建有一下幾種構造函數(從元數據),以此順序創建string; // // 摘要: // 將 System.String 類的新實例初始化為由 Unicode 字元數組指示的值。 // // ...
一、字元串
- 通過string定義一個字元串,或者通過String類來創建對象。
- 通過new String() 創建有一下幾種構造函數(從元數據),以此順序創建string;
-
// // 摘要: // 將 System.String 類的新實例初始化為由 Unicode 字元數組指示的值。 // // 參數: // value: // Unicode 字元的數組。 [SecuritySafeCritical] public String(char[] value); // // 摘要: // 將 System.String 類的新實例初始化為由指向 8 位有符號整數數組的指針指示的值。 // // 參數: // value: // 一個指針,指向以 null 結尾的 8 位帶符號整數數組。 // // 異常: // T:System.ArgumentNullException: // value 為 null。 // // T:System.ArgumentException: // 如果 value 是用 ANSI 編碼的,則不能使用 value 初始化 System.String 的新實例。 // // T:System.ArgumentOutOfRangeException: // 要初始化的新字元串的長度過大,無法分配,該長度由 value 的 null 終止字元決定。 // // T:System.AccessViolationException: // value 指定的地址無效。 [CLSCompliant(false)] [SecurityCritical] public String(sbyte* value); // // 摘要: // 將 System.String 類的新實例初始化為由指向 Unicode 字元數組的指定指針指示的值。 // // 參數: // value: // 指向以 null 終止的 Unicode 字元數組的指針。 // // 異常: // T:System.ArgumentOutOfRangeException: // 當前進程並不是對所有編址字元都有讀取許可權。 // // T:System.ArgumentException: // value 指定了包含無效 Unicode 字元的數組,或者 value 指定了小於 64000 的地址。 [CLSCompliant(false)] [SecurityCritical] public String(char* value); // // 摘要: // 將 System.String 類的新實例初始化為由重覆指定次數的指定 Unicode 字元指示的值。 // // 參數: // c: // 一個 Unicode 字元。 // // count: // c 出現的次數。 // // 異常: // T:System.ArgumentOutOfRangeException: // count 小於零。 [SecuritySafeCritical] public String(char c, int count); // // 摘要: // 將 System.String 類的新實例初始化為由 Unicode 字元數組、該數組內的起始字元位置和一個長度指示的值。 // // 參數: // value: // Unicode 字元的數組。 // // startIndex: // value 內的起始位置。 // // length: // 要使用的 value 內的字元數。 // // 異常: // T:System.ArgumentNullException: // value 為 null。 // // T:System.ArgumentOutOfRangeException: // startIndex 或 length 小於零。- 或 -startIndex 和 length 之和大於 value 中的元素數。 [SecuritySafeCritical] public String(char[] value, int startIndex, int length); // // 摘要: // 將 System.String 類的新實例初始化為由指向 8 位有符號整數數組的指定指針、該數組內的起始位置和一個長度指示的值。 // // 參數: // value: // 指向 8 位帶符號整數數組的指針。 // // startIndex: // value 內的起始位置。 // // length: // 要使用的 value 內的字元數。 // // 異常: // T:System.ArgumentNullException: // value 為 null。 // // T:System.ArgumentOutOfRangeException: // startIndex 或 length 小於零。- 或 -由 value + startIndex 指定的地址相對於當前平臺來說太大;即,地址計算溢出。- // 或 -要初始化的新字元串的長度太大,無法分配。 // // T:System.ArgumentException: // 由 value + startIndex 指定的地址小於 64K。- 或 -如果 value 是用 ANSI 編碼的,則不能使用 value 初始化 System.String // 的新實例。 // // T:System.AccessViolationException: // value、startIndex 和 length 共同指定的地址無效。 [CLSCompliant(false)] [SecurityCritical] public String(sbyte* value, int startIndex, int length); // // 摘要: // 將 System.String 類的新實例初始化為由指向 Unicode 字元數組的指定指針、該數組內的起始字元位置和一個長度指示的值。 // // 參數: // value: // 指向 Unicode 字元數組的指針。 // // startIndex: // value 內的起始位置。 // // length: // 要使用的 value 內的字元數。 // // 異常: // T:System.ArgumentOutOfRangeException: // startIndex 或 length 小於零,value + startIndex 引起指針溢出,或者當前進程並不是對所有編址字元都有讀取許可權。 // // T:System.ArgumentException: // value 指定了包含無效 Unicode 字元的數組,或者 value + startIndex 指定了小於 64000 的地址。 [CLSCompliant(false)] [SecurityCritical] public String(char* value, int startIndex, int length); // // 摘要: // 將 System.String 類的新實例初始化為由指向 8 位有符號整數數組的指定指針、該數組內的起始位置、長度以及 System.Text.Encoding // 對象指示的值。 // // 參數: // value: // 指向 8 位帶符號整數數組的指針。 // // startIndex: // value 內的起始位置。 // // length: // 要使用的 value 內的字元數。 // // enc: // 一個對象,用於指定如何對 value 所引用的數組進行編碼。如果 enc 為 null,則假定以 ANSI 編碼。 // // 異常: // T:System.ArgumentNullException: // value 為 null。 // // T:System.ArgumentOutOfRangeException: // startIndex 或 length 小於零。- 或 -由 value + startIndex 指定的地址相對於當前平臺來說太大;即,地址計算溢出。- // 或 -要初始化的新字元串的長度太大,無法分配。 // // T:System.ArgumentException: // 由 value + startIndex 指定的地址小於 64K。- 或 -未能使用 value 初始化 System.String 的新實例,假定 value // 按照 enc 的指定進行編碼。 // // T:System.AccessViolationException: // value、startIndex 和 length 共同指定的地址無效。 [CLSCompliant(false)] [SecurityCritical] public String(sbyte* value, int startIndex, int length, Encoding enc);
View Code -
char []cstr = { 'a','b','c','d','e'}; char cstr1 = 'a'; sbyte se = 113; String a = new String(cstr); // String b = new String(&cstr1); String c = new String(&se); String d = new String('d',2); String e = new String(cstr,2,3); String f = new String(&se,0,1); Console.WriteLine((int)Convert.ToChar(f)+"\n");//113 String g = new String(&se,0,1,Encoding.UTF8); Console.WriteLine("a:{0}\nb:{1}\nc:{2}\nd:{3}\ne:{4}\nf:{5}\ng:{6}",a,b,c,d,e,f,g);
View Code
- string是C#基元類型(primitive),string簡單來說就是編譯器直接支持的數據類型。運算符(== 和 !=)是為了比較 string 對象的值, 而不是比較引用
-
string a = "1234"; string b = "123"; b += "4"; Console.WriteLine(a == b);//比較值 Console.WriteLine((object)a == (object)b);//比較引用()
-
- string連接操作 (+=)
- 缺點很明顯, 操作頻繁的話十分浪費記憶體空間的
- 使用StringBuilder類對象方法append代替+=, 性能還有所提升
- null," "和string.Empty的區別
- null表示不引用任何變數的空引用的值,null是引用變數的預設值, 值類型變數無法使用
- ""表示分配一個記憶體為空的存儲空間。
- string.Empty表示空字元串,並且不分配記憶體空間。
- 判斷字元串為空 的倆種方法
- x.length==0 // 無法判斷為null的字元串
- string.IsNullOrEmpty(x)