C#入門經典札記_Ch05變數的更多內容

来源:http://www.cnblogs.com/shouce/archive/2016/04/25/5429267.html
-Advertisement-
Play Games

Chapter 05 變數的更多內容 5.1類型轉換 1.無論什麼類型,所有的數據都是一系列的位,即一組0和1。變數的含義是通過解釋這些數據的方式來傳達的。最簡單的示例是char類型,這種類型用一個數字表示Unicode字元集中的一個字元。實際上,這個數字與ushort的存儲方式相同 他們都是存儲0 ...


Chapter 05 變數的更多內容

5.1類型轉換

1.無論什麼類型,所有的數據都是一系列的位,即一組0和1。變數的含義是通過解釋這些數據的方式來傳達的。最簡單的示例是char類型,這種類型用一個數字表示Unicode字元集中的一個字元。實際上,這個數字與ushort的存儲方式相同----他們都是存儲0~65535之間的數字。

2.一般情況下,不同類型的變數使用不同的模式來表達數據。這意味著,即使可以把一系列的位從一種類型的變數移動到另一種類型的變數中(也許他們占用的存儲空間相同,也許目標類型有足夠的存儲空間包含所有的源數據位),結果也可能與期望的不同。這並不是數據位從一個變數到另一個變數的一對一映射,而是需要對數據進行轉換。

5.1.1 隱式轉換

1.bool和string沒有隱式轉換

2.隱式轉換的規則:任何類型A,只要取值範圍完全包含在類型B的取值範圍內,就可以隱式轉換為類型B。

5.1.2 顯示轉換

1.關鍵字 checked和unchecked

5.1.3 使用convert命令進行顯示轉換

Convert.ToInt32(val)

轉換的名稱略不同於C#類型名稱,例如,要轉換為int,應使用Convert.ToInt32()。這是因為這些命令來自於.net framework的System名稱空間,而不是C#本身。這樣他們就可以在除C#以外的其他.net相容語言中使用。

 

5.2 複雜的變數類型

5.2.1 枚舉

有時希望變數提取的是一個固定集合中的值,就可以使用枚舉類型。

1.定義枚舉

枚舉可以使用enum關鍵字來定義:

Enum typeName : underluingType

{

values1,

values2,

……

valuesN

}

接著聲明這個新類型的變數:

typeName varName;

並賦值:

varName=typeName.value;

2.枚舉使用一個基本類型(underlying)來存儲。在預設情況下,該類型為int,可以是byte,short,ushort,int,uint,long和ulong。所以枚舉和數組一樣,數據類型只有一種的。

3.在預設情況下,每個只都會根據定義的順序(從0開始),自動賦給對應的基本類型值。這意味著value1的值是0,value2是2......。可以重寫這個賦值過程,使用=運算符。

4.還可以使用一個值作為另一個枚舉的基礎值,為多個枚舉指定相同的值。沒有賦值的任何值都會自動獲得一個初始值,這裡使用的值是比最後一個明確聲明的值大一的序列。

5.把枚舉轉化為其他數據類型?

6.使用typeof(<var>)運算符,可以得到操作數類型。

5.2.2 結構

結構就是由幾個數據組成的數據結構,這些數據可能有不同的類型。

1.定義結構

使用struct關鍵字來定義

struct <typeName>

{

<menberDeclarations>

}

<memberDeclarations>部分包含的變數的定義(成為結構的數據成員),其格式與往常一樣,每個成員的聲明都採用如下的形式:

<accessibility> <type> <name>;

如:

struct  myStruct

{

pubilc int  x;

pubilc double  y;

}

定義了這個結構類型之後,就可以定義新類型的變數,來使用這個結構:

myStruct myStr;

還可以通過句點字元訪問這個組合變數中的數據成員:

myStr.x=2;

myStr.y=2.3;

 

5.2.3 數組

前面所有的類型都有一個共同點:他們都只存儲一個值(結構中存儲一組值)。有時,需要儲存許多數據,有時需要同時存儲類型相同的幾個值,而不是每個值都使用不同的變數。

數組是一個變數的下標列表,存儲在數組類型的變數中。數組有一個基本類型,數組的各個元素都是這種類型。

1.聲明數組:

<baseType>[]  <name>;

其中<baseType>可以是任何變數類型,包括本章前面介紹的枚舉和結構類型。

初始化數組有兩種方式。

1)可以以字面形式指定數組的完整內容。需要提供一個用逗號隔開的元素值列表,該列表放在花括弧中如:

int[]  myIntArray={1,4,5,7,9};

2)也可以指定數組的大小,再使用new關鍵字初始化數組元素。需要使用下述語法:

int[] myIntArray= new int[5];

notice:

  這裡使用關鍵字new顯示的初始化數組,用一個常量定義其大小。這種方式會給所有的數組元素都賦予同一個預設值,對於數值類型來說,其預設值是0。也可以使用非常量變數來進行初始化,如:

int[] myIntArray=new int [arraySize];

3)另外,還可以使用這兩種初始化方式的組合:

int[] myIntArray=new int[5]{1,3,5,7,9};

使用這種方式,數組的大小必須與元素的個數相匹配。

如果使用變數定義其大小,該變數必須是一個常量,必須用const關鍵字例如:

const int arraySize=5;

int[] myIntArray=new int[arraySize]{1,3,5,7,9};

2.foreach迴圈

foreach(<baseType>  <name> in <array>)

{

//can use <name> for each elemet

}

這個迴圈會迭代每個元素,依次把每個元素放在變數<name>中,且不存在訪問非法的危險。使用這種方法和標準的for迴圈的主要區別是foreach迴圈對數組內容進行只讀訪問,所以不能改變任何元素的值。

3.多維數組

1)二位數組的聲明:

<baseType>[,]  <name>;

多維數組只需要更多的逗號:

<baseType>[,,,]  <name>;

2)聲明和初始化

double[,]  hillHeight=new double[3,4];

還可以使用字面值進行初始賦值,這裡使用嵌套的花括弧用逗號隔開,如:

double[,]  hillHeight={{1,1,1,},{2,2,2,2},{3,3,3,3}};

4.數組的數組(變長數組)

 可以使用變長數組,其中每行都有不同的元素個數。為此,需要這樣一個數組,其中的每個元素都是另一個數組。也可以有數組的數組的數組,或更複雜的數組。但是,註意這些數組必須有相同的基本類型。

1)聲明數組的數組(變長數組),其語法要在數組的聲明中指定多個方括弧對,例如:

int[][] jaggedIntArray;

2)初始化

有兩種方式:可以初始化包含其他數組的數組(稱之子數組)然後依次初始化子數組:

jaggedIntArray=new int[2][];

jaggedIntArray[0]=new int[3];

jaggedIntArray[1]=new int[4];

也可以使用上述字面值賦值的一種改進形式:

jaggedIntArray=new int[3][]{new int[]{1,2,3},new int[]{1},new int[]{1,2}};

也可以簡化,把數組的初始化和聲明放在同一行上,如:

int[][] jaggedIntArray={new int[]{1,2,3},new int[]{1},new int[]{1,2}};

3)使用foreach迭代時,通常需要嵌套該迴圈,迴圈該數組本身和每個子數組。因為數組jaggedIntArray包含的是int[]元素,而不是int元素。

5.3 字元串的處理

1.string類型變數可以看作是char變數的只讀數組,如:

string myString=” A  string”;

char myChar=myString[4];

2.但是,不能用這種方式為各個字元變數賦值。為了獲得一個可寫的char數組,可以使用下麵的代碼,其中使用了數組變數的ToCharArray()命令:

string myString=” A  string”;

char[] myChars=myString.ToChatArray();

接著就可以用標準方式處理char數組。也可以在foreach迴圈中使用字元串。

3.myString.Length;

4.myString.ToLower();       myString.ToUpper();

5.<string>.Trim()

1)可以使用<string>.Trim()刪除輸入內容前面<string>.TrimStart()的和後面的空格<string>.TrimEnd()。

2)也可以使用該命令刪除指定的字元,只要在一個char數組中指定這些字元即可,如:

char[] trimChars={‘ ‘,’e’,’s’};

string userResponse=Console.ReadLine();

userResponse=userResponse.Trim(trimChars);

if(userResponse==”y”)

{

//act on response.
}

6.<string>.PadLeft()和<string>.PadRight()

1)可以在字元串的左邊或者右邊添加空格

myString=”Aligned”;

myString=myString.PadLeft(10,);

2)也可以添加指定的字元到字元串上,這需要一個char,如:

myString=”Aligned”;

myString=myString.PadLeft(10,’-’); //這將會在myString開頭加上3個’-’。

7.<string>.Split()

1)可以把string轉換為string數組,把它的指定的位置分隔開。這些位置採用char數組的形式。如:

string myString =“This is a test.”

char[] separator={‘ ’};

string[] myWords=myString.Split(separator);

notice:

在使用split()時,刪除了分隔符。


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

-Advertisement-
Play Games
更多相關文章
  • 實現的原理比較直接,定義一個MessageHandler記錄WebAPI的請求記錄,然後將這些請求日誌推送到客戶端,客戶端就是一個查看日誌的頁面,實時將請求日誌展示在頁面中。 這個例子的目的是演示如何在PersistentConnection類外部給Clients推送消息 實現過程 一、服務端 服務 ...
  • ASP.NET vNext總結:EntityFramework7 源碼分享:http://www.jinhusns.com/Products/Download/?type=xcj 1.概述 關於EF7之前的版本如何?這裡就不再扯了。更不會和別人爭論EF的性能如何?好比一把寶刀,在善於用它的高手和不善 ...
  • 當你的資料庫為SQLEXPRESS時,在程式的資料庫連接字元串的服務Server使用127.0.0.1\SQLEXPRESS時,如下:它會顯示一異常: Server Error in '/' Application. A network-related or instance-specific er ...
  • 系列教程:MVC5 + EF6 + Bootstrap3 上一節:MVC5 + EF6 + Bootstrap3 (10) 數據查詢頁面 源碼下載:點我下載 我工作的源碼:http://www.jinhusns.com/Products/Download/?type=xcj 目錄 前言 排序 搜索 ...
  • 傳入一個cid,返回一個數組類型數據,在傳入數組中的cid,返回子類別數組數據,直到沒有子類別 例子: 將: [ { "cid","123", name:"標題1" }, { "cid","1234", name:"標題1" }, { "cid","1234", name:"標題1" }, { "c ...
  • [源碼下載] 背水一戰 Windows 10 (9) - 資源: 資源限定符概述, 資源限定符示例 作者:webabcd介紹背水一戰 Windows 10 之 資源 資源限定符概述 資源限定符示例 示例1、資源限定符概述Resource/Qualifiers/Summary.xaml Resourc ...
  • 代碼: using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.Da ...
  • EF6引入一個彈性連接的功能,也就是允許重新嘗試執行失敗的資料庫操作。某些複雜的場景中,可能需要啟用或停用重試執行的策略,但是EF框架暫時尚未提供直接的設置開關,將來可能會加入這種配置。幸運的是,很容易自己實現該設置功能。 最簡單的註冊執行策略的方法是通過基於代碼的配置。下麵代碼是一個典型的配置類, ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...