天天看點

C# 基礎知識 (五).變量類型和字元串處理

        這篇文章是閱讀《C#入門經典(Beginning C#)》書籍裡面的内容,作者Karli Watson.主要包括自己缺乏的一些C#基礎知識和線上筆記使用,文章主要包括C#簡單變量類型和複雜變量類型、命名規則、隐式轉換和顯示轉換、變量字元串處理等内容,都是非常基礎的知識,希望對初學者有所幫助.

        簡單類型組成應用程式中基本構件的類型,其中主要有以下類型:

整數類型

sbyte(-128~127之間整數) byte(0~255之間整數) short(-32768~32767之間整數)

ushort(0~65535之間整數) int(4位元組,1Byte=8bit) 

uint(0~2^32-1之間整數)

long(别名System.Int64) ulong(别名System.UInt64,u是unsigned縮寫,非負數)

浮點數類型

float double(+/- m*2^e) decimal(+/- m*10^e)

3種簡單類型

char(一個Unicode字元,存儲0~65535之間整數)

bool(布爾值true/false)  string(一組字元)

C#變量命名規則:變量名的第一個字元必須是字母、下劃線(_)或@,其後的字元可以是字母、下劃線或數字.

        命名約定:以前用Hungarian表示法-在變量名上加上小寫形式的字首,表示其類型,如int型iAge.但由于C# .NET Framework類型複雜,最好根據變量的作用命名它們,目前.NET Framework命名約定PascalCase和camelCase.在名稱中使用大小寫表示它們的用途,由多個單詞組成.

        PascalCase指定名稱中每個單詞除第一個字母大寫外,其餘小寫.如Age/LastName/WinterOfDiscontent.

        camelCase第一個單詞以小寫字母開頭,如age、firstName、timeOfDeath.Microsoft建議對于簡單變量使用camelCase規則,較進階命名使用PascalCase.建議大家在命名時盡量使用這種方法,友善他人閱讀.

        注意:下劃線字元分割變量名中單詞如month_time已經被淘汰.

        逐字指定字元串:兩個雙引号之間的所有字元都包含在字元串中,包括行末字元和轉義字元.唯一例外是雙引号字元的轉義必須指定,以免結束字元串,可以在該字元串前加@.

        逐字指定的字元串在檔案名中非常有用(反斜杠字元\),前面做過的工程都涉及磁盤目錄、圖檔路徑,可見其用途極為廣泛.即:@"C:\Temp\MyDir\MyFile.doc"="C:\\Temp\\MyDir\\MyFile.doc".

        位運算包括&按位與 |按位或 ^按位異或 ~取反 <<左移 >>右移.

隐式轉換:從類型A到類型B的轉換可以在所有情況下進行,執行轉換的規則簡單,可以讓編譯器執行轉換.

        顯示轉換:從類型A到類型B的轉換隻能在某些情況下進行,轉換的規則比較複雜,應進行某種類型的處理.

        其中隐式轉換規則是類型A取值範圍完全包含在類型B的取值範圍内,就可以轉換為類型B.其中byte可以轉換為short/int或float可以轉轉為double.short類型變量可以存儲0~32767而byte可以存儲的最大值255,是以當short轉換byte時如果在256~32767就會出錯.

        而顯示轉換即明确要求編譯器把數值從一種資料類型轉換為另一種資料類型,其中編寫代碼的格式随着轉換方法而異.相當于"我已經知道你對在這麼做提出了警告,但我将對其後果負責".如:

        byte n; short m = 7; n = m;

        它将會報錯:無法将類型"short"隐式轉換為"byte",存在一個顯示轉換(是否缺少強制轉換?)

        此時需要顯示轉換,最簡單的方法是把short變量強制轉換為byte,如n=(byte)m;但需要注意m大于255時會産生資料丢失.

        C#提供表達式溢出檢查上下文.使用checked和unchecked關鍵字,如n=checked((byte)m); 當m=281時會報錯資訊"算術運算導緻溢出".

        PS:配置程式表達式都包含checked,右擊"解決方案資料總管"項目->屬性->生成->進階(Advanced)->選中"檢查運算上溢/下溢",如下圖所示:

C# 基礎知識 (五).變量類型和字元串處理

        另一種顯示轉換方法是使用Convert指令進行顯示轉換,要轉換為int使用Convert.ToInt32(); 轉換為字元串使用Convert.ToString(boolVal);結果輸出"true/false".這種我在使用字元串和設定編碼格式時經常使用.

        複雜的變量類型主要包括:

        枚舉:變量類型,使用者定義一組可能的離散值,這些值用人們了解的方式使用

        結構:合成的變量類型,由使用者定義的一組其他變量類型組成

        數組:包含一種類型的多個變量,可以以索引方式通路各個數值    

        1.枚舉

        有時希望變量提出的是一個固定集合中的值,如week類型存儲星期7天,month存儲12個月份.枚舉允許定義一個類型,其中包含提供的限定值集合中的一個值,如枚舉類型orientation可以存儲north/south/east/west值.枚舉預設類型是int,預設情況每個值都會根據定義的順序(從0開始),自動指派給對應的基本類型.沒有指派的任何值都會自動獲得一個初始值,該值比上一個明确聲明的值大1.舉例:

        PS:該程式輸出結果為: "myDirection = south 2",實際項目中枚舉應用如在制作畫圖軟體時,自定義枚舉類型UserSelect變量,然後判斷其if (iUserSelect == (int)UserSelect.SELECT)滑鼠選擇的是線段、矩形、選中狀态等.而C語言中經常考察枚舉類型的指派、占用空間位址與結構進行對比等題目.

        2.結構

        struct,structure縮寫.結構就是由幾個資料組成的資料結構,這些資料可能具有不同的類型.根據這個結構可以定義自己的變量類型.如學生資訊(學号+姓名)、存儲一段路程(方向+距離),假定東南西北四個方向.通常方法是定義:orientation myDirection; double myDistance;但是如果存儲多個路徑時定義變量比較麻煩,是以引入結構struct.主要包括結構體資料成員,其格式"<accessibility> <type> <name>;修飾 類型 名稱".舉例:

        運作結果為"direction = west distance = 3.14".

        3.數組

        數組是一個變量的索引清單,存儲在數組類型的變量中,存儲類型相同的多個值.與C略有不同,C#聲明數組的方法是:<baseType>[] <name> 如:int[] myArray;

        初始化的兩種方法:

        int[] myArray = {1,2,3,4,5};或者int[] myArray = new int[5];

        其中new顯示初始化數組大小為5,數組元素賦預設值0.如Console.WriteLine("aArray = {0} , bArray = {1}",aArray[3],bArray[2]);輸出數字"aArray = 4 , bArray = 0".數組索引從0開始,定義Name[5]即索引為0-4.多元數組的聲明如double[,]

length = new double[3,4]表示3*4的數組.這些基礎知識就不在強調了,應該大家都會.

        <string>.ToCharArray()擷取一個可寫的char數組,該字元數組中存放目前字元串的所有字元,将字元串複制到指定字元數組中.如:string str = "This is a string"; char[]

chs = str.ToCharArray();

        <string>.Length擷取元素的個數,給出字元串的字元數.

        <string>.ToLower|<string>.ToUpper()把字元串轉換為小寫形式和大寫形式,在比較或指派時使用,如:if(useResponse.ToLower() == "yes").

        <string>.Trim()删除輸入字元串的空白字元,注意是去掉首尾空格.如:char[] chs = {' ','e','s'}; string str = "    This is a Yeeees  "; str = str.Trim(chs);輸出"This is a Y".從字元串的前面或後面删除所有空格、字母e和s 而中間的空格\e\s不變.

        <string>.TrimStart()|<string>.TrimEnd()把字元串前面或後面的空格去掉.

       <string>.PadLeft()|<string>.PadRight()字元串的左邊或右邊添加空格,使字元串達到指定長度.該方法用于列中對齊字元串,資料庫查詢顯示資訊時常用.如: str = "abcdefg"; str = str.PadLeft(10); //輸出"  

abcdefg" str = str.PadRight(10,'X'); //輸出"abcdefgXXX".

<string>.Split()把string字元串轉換為string數組,在指定位置分隔開并删除分隔符,下面是使用空格分隔string str = "This is a string!" char[] chs = {' '}; string[] words; words = str.Split(chs); //輸出This is a string!四個單詞

        PS:還有很多字元串處理函數作者不在續寫,使用者可以鍵入代碼第一個字元時,IDE幫助使用者提供輸入關鍵字、變量名、類型名等,即IntelliSense功能(智能感應).而且查詢用法和關鍵字時按住Ctrl鍵可以繼續閱讀被擋住部分代碼(變透明).這個Ctrl我也是叢書中知道.

        總結:該文章主要是關于C#基礎知識的變量類型和字元串處理,其中主要參照書籍《C#入門經典》,推薦大家學習C#的入門書籍.寫這種文章感覺有時候自己想得挺多的,可能也有點水,但問心無愧.其實我也更願意寫些實際項目的東西或一些項目經驗、項目真正的技術文章,但由于自己的閱曆不夠、項目能力還一般,還需要繼續學習實踐,而這種基礎文章更多是線上筆記!有時寫起來有點淡淡的傷感.希望以後自己能沉下心去真正去學些東西、做些東西,但現在總是有點迷茫,感覺很多東西需要學習又有些乏力,不管如何,先腳踏實地的學些東西,沉浸到代碼中去,慢慢尋找自己的人生路吧!自己給自己鼓勵,如果有錯誤或不足之處還請海涵!有建議或教導也可以提出來分享~