標籤:char 轉化 檢查 null name 注釋 緩衝 目標變數 lock
字串
字串是Unicode字串數組,且是不可變的
這種操作不會影響到原來的字串,它會新添加一個副本。
有關Split的操作
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Reflection;using System.Runtime.CompilerServices;using System.Diagnostics;namespace ConsoleApp2{ class Program { static void Main(string[] args) { string s1 = "hi there! this, is: a string."; char[] delimiter = { ‘ ‘, ‘!‘, ‘,‘, ‘.‘,‘:‘ }; string[] words = s1.Split(delimiter, StringSplitOptions.RemoveEmptyEntries); foreach (string s in words) { Console.WriteLine(s); } } }}
StringBuilder類
StringBuilder類可以協助你動態,有效產生字串,並且避免建立許多副本
StringBuilder類是BCL的成員,位於Syste.Text命名空間中,是Unicode的可變數組
建立了StringBuilder對象之後,類分配一個比當前字串長度更長的緩衝區,只有緩衝區能容納對字串的改變就不會分配記憶體
如果大於當前的緩衝,就會分配更大的緩衝區,把字串複製其中,和原來的緩衝區區一樣。
把字串解析為資料值
所有的預定義的簡單類型都有一個叫做Parse的靜態方法,它接受一個表示這個類型的字串值,並且把它轉化為類型的實際值
每一個具有Parse方法的內建類型都有一個TryParse方法
TryParse方法接受兩個參數並且返回一個bool值
第一個是希望轉化的字串
第二個是指向目標變數的引用的out參數
如果TryParse成功,返回true,否則返回false
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Reflection;using System.Runtime.CompilerServices;using System.Diagnostics;namespace ConsoleApp2{ class Program { static void Main(string[] args) { string parseResultSummary; string stringFirst = "28"; int intFirst; bool success = int.TryParse(stringFirst, out intFirst); parseResultSummary = success ? "was successfully pared" : "was not successfully parsed"; Console.WriteLine("String {0} {1}",stringFirst,parseResultSummary); string stringSecond = "vt750"; int intSecond; success = int.TryParse(stringSecond, out intSecond); parseResultSummary = success ? "was successfully parsed" : "was not successfully parsed"; Console.WriteLine("String {0} {1}", stringSecond, parseResultSummary); } }}
可空類型
可空類型總是基於另外一個叫做基礎類型的已經被聲明的類型
- 可以從任何實值型別建立可空類型,包括預定義的簡單類型
- 不能從參考型別或其它可空類型建立可空類型
- 不能再代碼中顯示聲明可空類型,只能聲明可空類型的變數
要建立可空類型的變數,只需要在變數聲明中的基礎類型的名字後面加一個問號
使用可空類型必須確保變數不是null的,嘗試讀取一個null的變數會產生異常
- 使用方式一樣
- 要檢測可空類型是否有值,可以將它和null比較或檢查他的hasValue屬性
使用空接合運算子
由兩個連續的問號組成
使用可空使用者自訂類型
struct MyStruct{ public int x; public int y; public MyStruct(int xVal,int yVal) { x = xVal; y = yVal; }}
static void Main(string[] args){ MyStruct? mSNull = new MyStruct(5, 10); Console.WriteLine(mSNull.Value.x);}Nullable<T>
Main方法
前兩種形式在程式終止後都不傳回值給執行環境,後面的兩種返回int,0通常表示成功。
參數 可以有0個或多個,即使沒有參數,args參數也不會是null,而是是一個沒有元素的數組
文檔注釋
巢狀型別
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Reflection;using System.Runtime.CompilerServices;using System.Diagnostics;namespace ConsoleApp2{ class MyClass { class MyCounter { public int Count { get; private set; } public static MyCounter operator ++(MyCounter current) { current.Count++; return current; } } private MyCounter counter;//嵌套類類型的欄位 public MyClass() { counter = new MyCounter(); }//建構函式 public int Incr() { return (counter++).Count; }//建構函式 public int GetValue() { return counter.Count; }//擷取計數值 } class Program { static void Main() { MyClass mc = new MyClass(); mc.Incr(); mc.Incr(); mc.Incr(); mc.Incr(); mc.Incr(); mc.Incr(); Console.WriteLine(mc.GetValue()); } }}
- 巢狀型別的成員對封閉類型的成員總是有完整存取
- 封閉類型的成員
- 總是可以訪問巢狀型別本身
- 只能訪問聲明了有存取權限的巢狀型別成員
巢狀型別的可見度還會影響基類成員的繼承,如果封閉類型是一個衍生類別,巢狀型別就可以統一使用相同的名字來隱藏成員。可以在巢狀型別的聲明上使用new修飾符來顯式隱藏。
巢狀型別中的this引用指的是巢狀型別的對象。如果巢狀型別的對象需要訪問封閉類型,它必須持有封閉類型的引用。以下代碼錶示。把封閉對象提供的this引用作為參數傳給巢狀型別的建構函式
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Reflection;using System.Runtime.CompilerServices;using System.Diagnostics;namespace ConsoleApp2{ class SomeClass//封閉類 { int Field1 = 15, Field2 = 20;//封閉類的欄位 MyNested mn = null;//嵌套類的引用 public void PrintMyMembers() { mn.PrintOuterMembers();//調用嵌套類中的方法 } public SomeClass()//建構函式 { mn = new MyNested(this);//建立嵌套類執行個體 this給封閉類型傳遞引用 } class MyNested//嵌套類聲明 { SomeClass sc = null;//封閉類的引用 public MyNested(SomeClass SC)//嵌套類的建構函式 { sc = SC;//儲存嵌套類的引用 } public void PrintOuterMembers() { Console.WriteLine("Field1 : {0}",sc.Field1);//封閉欄位 Console.WriteLine("Field2 : {0}",sc.Field2);//封閉欄位 } } } class Program { static void Main() { SomeClass MySC = new SomeClass(); MySC.PrintMyMembers(); } }}
C# 字串操作,可空類型,文檔注釋,巢狀型別