如鵬網學習筆記(四).Net常用類庫

來源:互聯網
上載者:User

標籤:適合   寫入檔案   key   參數   類對象   this   指定位置   bool   缺陷   

.Net常用類庫

一、String成員方法(常用)
  1,bool Contains(string str)判斷字串對象是否包含給定的內容

  2,bool StartsWith(String str):判斷字串對象是否以給定的字串開始。

  3,bool EndsWith(String str):判斷字串對象是否以給定的字串結束。

    案例:判斷是否是網址:以http://開頭、以.com或者.cn結尾。

    案例:判斷使用者輸入的郵件是否是QQ郵箱,使用者輸入的使用者名稱是否包含“毛ze東”等敏感詞

  4,int Length擷取字串的長度屬性

    str.Length

  5,char ch = str[3];

  6,int indexOf(int ch)   //返回指定字元在此字串中第一次出現的索引

  7,int indexOf(string str)   //返回指定字串在此字串中第一次出現的索引

  8,LastIndexOf   //最後一次出現的位置

  9,String Substring(int start)  //截取字串,返回從指定位置開始截取後的字串

  10,String substring(int start,int length)  //截取字串,返回從指定位置開始截取指定長度length的字串

  11,String ToLower()  //把字串變成小寫;

  12,String ToUpper()  //把字串變成大寫

  13,String Replace(char oldChar,char newChar)  //用新的字元去替換指定的舊的字元;

  14,String Replace(string lodStr,string newStr)  //用新的字串去替換指定的舊的字串

  15,String trim()  //去除字串兩端的空格,

  16,Trim(params char[] trimChars)  //去掉兩端的給定的字元

  17,TrimEnd和TrimStrat  //去掉開頭的和結尾的空格

  18,String是不可變的,因此上面的操作都是產生新的字串對象,要用傳回值去接收新的字串。

  19,String[] Split()  //重載方法很多,字串按照分隔字元切割。

  案例:把字串用“,”分割

二、String靜態方法

  1,bool IsNullOrEmpty(string value)  //判斷字串是否為null或者是Null 字元串

  2,bool Euqals(string a,string b,StringComparison.OrdinallgnoreCase)  //對兩個字串進行不區分大小寫比較

  3,string Join(string separator,params string[] value)  //把一個數組(集合)用分隔字元separator串連為一個字串

三、StringBuilder

  因為字串的不可變,在字串進行串連的時候會產生新的字串對象,造成浪費  

  1,Append();
    StringBuilder sb = new StringBuilder();
    sb.Append(s1);
    sb.Append(s2).Append(s3);//因為Append方法把this對象(當前對象)返回了,所以可以鏈式編程

    最後使用String s = sb.ToString(),一次性產生拼接結果字串即可

  2,AppendLine();

    將預設的行終止符追加到當前 System.Text.StringBuilder 對象的末尾。(追加完,斷行符號)

四、可空的int

  int是實值型別,不能為null。在C#中可以用int?表示“可空的int”

  注意類型的轉換:

    int? i = 5;
    if(i!=null)
    {
      int i1 = (int)i;//需要進行強轉
    }
  也可以通過i.HasValue,判斷是都為null、i.value擷取i的值

  通過IL可知,int?其實被編譯器翻譯為Nullable<int>類型

五、日期類型

  DateTime類表示時間資料類型。屬於結構體,因此是實值型別

  DateTime.Now  目前時間,

  DateTime.Today  當前日期

  可以通過Year、Month、Hour的屬性得到日期的年、月、小時等部分;
  也可以用建構函式根據給定的時間建立一個對象

六、異常的概念
  異常發生在程式發生的不正常情況下。異常以一個異常類對象的形式拋出,異常類描述異常資訊、發生的位置等。

  異常的根類為Exception。異常類一般都繼承自Excrption

七、異常的捕捉

  try
  {
    String s = null;
    s.ToString();
  }
  catch(NullReferenceException ex)
  {
    Console.WriteLine("為空白"+ex.Message);
  }

  ex就是發生異常的異常類對象,變數名只要不衝突就任意

  在異常處理中,一旦try裡面有問題了。放棄try代碼塊中之後的代碼,直接跳到catch裡面執行。

  如果try代碼後還有代碼,則處理完catch後還會繼續執行


八、多個異常的處理
  try
  {
    int a = 10;
    int b = 0;
    Console.WriteLine(a/b);
    int[] arr = {1,2,3};
    Console.WriteLine(arr[3]);
  }
  catch(DivideByZeroException ae)
  {
    Console.WriteLine("除數不能為0");
  }
  catch(IndexOutOfRangeException ae)
  {
    Console.WriteLine("數組越界異常");
  }

  可以catch住父類異常,這樣就可以抓住所有子類異常了,但是強烈不建議這樣做,不要沒理由的catch異常


九、不要吃異常
  catch(Exception ex)
  {
    //空代碼
  }

  不要只是把異常catch住什麼都不做或者只是列印一下,這不是正常的“異常處理”

  不知道怎麼處理就不要catch,出錯比“把錯誤藏起來”好。這樣以為“不會出錯了”,其實是把異常“吃掉了”,會讓程式陷入混亂狀態

  要合理的處理異常

十、finally

  try
  {
    //有可能有問題的代碼
  }
  catch(異常類型 異常變數)
  {
    //處理方式
  }
  finally
  {
    //無論是否出現異常,都要執行的代碼
  }

  finally中一般進行資源的回收等。


十一、File檔案類

  File是靜態類(無法被New),其主要的靜態方法有:

  1,void Delete(string path)  刪除檔案

  2,bool Exists(string path)  判斷檔案是否存在

  3,string[] ReadAllLines(string path)  將文字檔中的內容讀取到string數組中

  4,string ReadAllText(string path)  將文字檔讀取為一個字串

  5,void WriteAllLines(string path,string[] contents)  將string[]寫入到檔案中

  6,void WriteAllText(string path,string contents)  將字串contents寫入到檔案path中

  7,AppendAllText  向檔案中附加內容

  8,Copy  複製檔案

  9,Move  移動檔案

十二、Directory檔案夾類,為static類

  1,CreateDirectory(string path)建立檔案夾全路徑

  2,void Delete(string path,bool recursive) 
    刪除檔案夾path,recursive表示是否也刪除子檔案及子檔案夾。
    如果檔案夾不為空白,recursive=false,則拋異常

    範例程式碼:Directory.Delete(@"全路徑", true);

  3,boolExists(string path)  判斷檔案夾是否存在

  4,Directory.EnumerateFiles();  返回指定路徑中的檔案名稱的可枚舉集合。

  5, Directory.EnumerateDirectories();  返回指定路徑中與搜尋模式比對的目錄名稱的可枚舉集合。

十三、流Stream

  1,File類提供了讀寫文字檔的方法,但是對於大檔案不能用它提供的方法,太占記憶體,需要一種“串流”的方法

  2,.Net將IO操作(檔案、網路等)簡化成流模型Stream,是抽象類別,

    網路、檔案、加密稍等都是不同的子類,

    最常用的子類是FileStream、MemoryStream等

  3,使用Stream的時候雖然可以:
    FileStream fs = new FileStream();
    但是,Stream fs = new FileStream();更好!

    在使用的變數類型提供的操作能滿足的前提下,儘可能的用父類、介面聲明變數,(體現了多態的思想),

  4,FileStream寫入檔案

    FileStream fs = new FileStream(@"D:\1.txt", FileMode.Create);//建立一個文字檔
    byte[] bytes = Encoding.Default.GetBytes("你好如鵬網");//將“你好如鵬網”進行編碼成byte數組對象
    fs.Write(bytes, 0, bytes.Length);//操作fs對象進行寫入
    fs.Close();//關閉流

    Stream寫入的單位是byte(位元組),char轉換為byte時候,一個英文char轉換為一個byte(對應的ASCII碼),一個中文char轉換為兩個byte

    採用Default、UTF8、UTF32得到的字串的byte[]長度不一樣,因此說明不同類型編碼在電腦中儲存的不一樣。

    用什麼編碼寫入就用什麼編碼讀取,否則會有亂碼的問題。

    注意:不要往C盤寫,因為Win7、Win8預設普通程式沒有許可權讀寫C盤

  5,FileStream讀取

    1,byte[] bytes = new byte[4];
      每次讀取多個位元組資料,不能一次把一個檔案讀取出來,否則太佔用記憶體,因為數組是佔用記憶體的。
      這個叫做“緩衝區”,設的太小CPU和硬碟會很忙,設的太大記憶體會很“撐”

    2,while((len = fs.Read(bytes,0,bytes.Length))>0) 繼續從流中讀取最多bytes長度那麼多位元組的資料拷貝到bytes數組中。
      下次read是從上次最後一個read最後的位置之後開始讀,一次次的讀取read方法返回這次一共讀了多少位元組(比如遇到最後一次讀取可能讀不滿),
      一旦返回的=0了,就說明讀完了。
      對於沒被賦值初始值就是0,因為沒被填滿的數組位置是0.

    3,String s = Encoding.Default.GetString(bytes,0,len); 把byte[]轉換成對應string,考慮bytes沒有充分利用的情況

    4,位元組流不適合讀取內容中包含文字文件,容易造成資料錯亂(byte[]中含有一半的漢字)。

      要用後面講的StreamReader

十四、資源的關閉

  1,在上面的程式有缺陷,如果write的時候發生異常,fs就不會close,其他程式就無法寫入這個檔案了,也會佔用資源

  2,資源要使用完畢才能close,一旦close之後再操作就會出錯

  3,正確是做法是放在using(){}裡面




十五、using

  1,可以同時聲明多個資源

    using(MyFile f1 = new MyFile())
    using(MyFile f2 = new MyFile())
    {

    }

  2,using其實就是編譯器簡化的try。。finally操作,

  3,using只是try。。finally,如果需要catch,只管catch就是了

  4,注意:實現了IDisposable介面的對象用完了,都要Dispose


十六、複製檔案

  1,使用兩個FileStream配合完成檔案拷貝:
    從源檔案的FileStream中讀取一部分內容,再寫入到目標檔案的FileStream中。

    解釋代碼:
    1,while((len = inStream.Read(bytes,0,bytes.Length))>0)
      把讀取並且返回讀取的長度給len,然後判斷len的值,綜合為了一句話。

    2,outStream.Write(bytes,0,len);
      每次write都會從上次write的最後位置接著寫入。將byte[] 數組b寫入outStream中,off代碼距離當前寫入位置的位移量,一般寫0,len代表寫入多長。
      緩衝區先設定50,,修改為1M,體會速度的變化。使用StopWatch類進行代碼計時。


  2,封裝一個Copy方法
    封裝一個函數void copy(Stream inStream,Stream outStream,int bufferSize)用來把inStream拷貝到outStream中,
    緩衝區大小為bufferSize。要檢查參數合法性(是否為null、bufferSize是否在合理範圍)


  3,.Net 4.0之後Stream類中提供了一個CopyTo方法


  4,Reader、Writer(常值內容)

    直接用Stream進行文字檔的讀寫會比較麻煩,因為需要考慮檔案的編碼、中文字元等的問題

    StreamReader、StreamWriter是用來讀寫字元流(characterstream)的類,會幫著自動處理麻煩的問題


十七、編碼

  1,由於曆史原因,漢字等如何在電腦中以位元組儲存存在著多種標準,最常見的是GB2312(國家標準、表示漢字)、
    GBK(GB2312的擴充,還能表示繁體字等)、UTF-8(國際標準)、UTF-16等

  2,ANSI表示採用當前作業系統的預設編碼,如果是中文Windows,預設就是GBK

  3,用什麼編碼儲存就用什麼編碼讀取,就不會亂碼

  4,如何用其他編碼儲存?由StreamWriter建構函式決定:new StreamWriter(outStream, Encoding.UTF8
    怎麼初步判斷用了什麼編碼?記事本開啟另存新檔,可以看到

  5,讀取的編碼由StreamReader建構函式決定

十八、泛型容器List<T>

  1,數組長度是固定的,List<T>可以動態增刪內容。

    List<T>是泛型的,可以在聲明的時候指定放什麼類型的資料。

  2,如何增加

    List<int> list = new List<int>();

    list.Add(1);

    list.Add(2);

    list.AddRange(new int[]{1,2,3,4,5});

    list.AddRange(list2);//添加另外一個list

  3,如何遍曆

    int[] nums = list.ToArray();//List泛型集合可以轉換為數組

    List<string> listStr = new List<string>();

    string[] str = listStr.ToArray();

十九、泛型字典Dictionary<Key,Value>

  1,如何增加
    Dictionary<string,string> dict = new Dictionary<string,string>();
    dict.Add("zs","張三");
    dict.Add("ls","李四");
    dict.Add("ww","王五");

  2,如何修改
    dict["ls"] = "小趙";
    String s = dict["ww"];

  3,判斷是否包含
    dict.ContainsKey();

二十、foreach

  1,除了使用for迴圈可以進行遍曆外,實現了IEumerable介面的對象還可以使用foreach進行遍曆

    string[] strs = {"asdasd","qweqweq","gdfg"};
    foreach(string s in strs)
    {
      Console.WriteLine(s);
    }

  2,List<T>、Dictionary<K,V>等一切實現了IEnumerable介面的對象都可以進行遍曆

    Dictionary<string,object> dict = new Dictionary<string,object>();
    dict["rupeng"] = 888;
    dict["sina"] = "hehe";
    dict["baidu"] = true;
    foreach(KeyValuePair<string,object> kv in dict)
    {
      Console.WriteLine(kv.Key+"="+kv.Value);
    }

如鵬網學習筆記(四).Net常用類庫

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.