C# 字串操作,可空類型,文檔注釋,巢狀型別

來源:互聯網
上載者:User

標籤: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# 字串操作,可空類型,文檔注釋,巢狀型別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.