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

来源:http://www.cnblogs.com/DotNetStu/archive/2017/10/28/7748157.html
-Advertisement-
Play Games

.Net常用類庫 一、String成員方法(常用) 1,bool Contains(string str) 判斷字元串對象是否包含給定的內容 2,bool StartsWith(String str):判斷字元串對象是否以給定的字元串開始。 3,bool EndsWith(String str):判 ...


.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或者是空字元串

  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);
    }


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1》HAProxy簡介: HAProxy是免費,高效,可靠的高可用及負載均衡解決方案,該軟體非常適合於處理高負載站點的七層數據請求,HAProxy的工作模式使其可以非常容易且安全地集成 到我們現有的站點架構中,使用類似的代理軟體還可以對外屏蔽內部的真實WEB伺服器,防止內部伺服器遭受外部攻擊;HAP ...
  • 第一次面試遇到的問題,當時完全懵逼了 網上搜到的答案: 1. 管道( pipe ):管道是一種半雙工的通信方式,數據只能單向流動,而且只能在具有親緣關係的進程間使用。進程的親緣關係通常是指父子進程關係。 2. 有名管道 (named pipe) : 有名管道也是半雙工的通信方式,但是它允許無親緣關係 ...
  • WSL,Windows Subsystem for Linux,就是之前的Bash on [Ubuntu on] Windows(嗯,微軟改名部KPI++),在wsl環境下我們可以運行一些Linux程式。 首先要說一句,其實Windows 10在一周年更新(1607,內部版本14393)的時候就加入 ...
  • NTP(Network Time Protocol,網路時間協議)是用來使網路中的各個電腦時間同步的一種協議。它的用途是把電腦的時鐘同步到世界協調時UTC,其精度在區域網內可達0.1ms,在互聯網上絕大多數的地方其精度可以達到1-50ms。 NTP伺服器就是利用NTP協議提供時間同步服務的。 系 ...
  • rpm --import http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-6 執行完成後再按照如圖所示操作 ...
  • 第一步:# vi /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 BONDING_OPTS="mode=0 miimon=100" BOOTPROTO=none ONBOOT=yes BROADCAST=192.168.0.255 IP ...
  • 上篇文章介紹瞭如何在ASP.NET MVC項目中引入Identity組件來實現用戶註冊、登錄及身份驗證功能,並且也提到了Identity是集成到Owin中的,本章就來介紹一下什麼是Owin以及如何使用Owin來增強Identity的功能。 本章的主要內容有: ● 什麼是Owin ● 關於Katana ...
  • 今天跟著學習了一篇關於表格的排序、過濾與分頁功能的博客,下邊分享一下學到的知識與心得: 一、應用之前樣式,增加測試數據 對Views —— Account —— Index.cshtml進行如下修改: (1)應用佈局頁 _LayoutAdmin.cshtml @{ ViewBag.Title = " ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...