iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 8
1
自我挑戰組

.net 後端起手式 30天認識 C# 系列 第 8

DAY 08 型別常用方法

  • 分享至 

  • xImage
  •  

型別常用方法

分享一些個人常用的方法,本文會講解用法與用途,讓新手上手時可以快速使用。

數值型別

Parse

數值型別都會有一個 Parse 方法,可以使字串轉換成數字型別,若字串內容不是數字則會使程式掛掉如

int a1 = int.Parse ("16"); // 成功得到 16
int a2 = int.Parse ("5.16"); // 成功得到 5 因為是 int 沒有小數點
int a3 = int.Parse ("1.2.3"); // 失敗 因為 1.2.3 不是一個數字

double d1 = double.Parse("5.16") 成功得到 5.16

TryParse

當欲轉換成數字的內容是使用者定義的話,我們無法限制他輸入的內容,所以我們並需改用另一種方法 TryParse,這方法傳回的值是 bool,並給出一個被 out 寫入的變數如

int number = 1; // 先定義一個 number 去接收 TryParse 成功轉換後的值。
bool b1 = int.TryParse("1.2.3", out number); // 得到 False 因為無法轉換 number 還是 1
bool b2 = int.TryParse("6", out number); // 得到 True 所以 number 變成 6

此方法可以當作過濾錯誤的輸入值或資料來源的錯誤資料如

string input = Console.ReadLine ();
if (int.TryParse (input, out int number)) {
  Console.WriteLine ($"你輸入的是數字{number}");
} else {
  Console.WriteLine ("你輸入的不是數字");
}
Console.ReadKey ();

out 寫入的變數也可以在呼叫方法時初始化。

ToString

把數值轉換成字串

int number = 5;
string str = number.ToString();

上面講的方法都是型別的靜態方法,也就是由型別 int. 或者 double. 所呼叫的方法,而 ToString 則是型別的原生方法,也就是由變數 number. 所呼叫的方法。

題外話:我不知道用原生方法這個詞好不好,主要是為了與之後的擴充方法做個差異。

從數值轉換成字串時,我們可以帶參數使轉換的字串是貨幣、百分比或者換成其他進制表示等。

int number = 516;
string currency = number.ToString ("C");
Console.WriteLine (currency);
string percent = number.ToString ("P");
Console.WriteLine (percent);
string hex = number.ToString ("X");
Console.WriteLine (hex);
Console.ReadKey ();

更多的轉換方式可以到參考連結看

個人習慣如果不是要轉成特定樣子,而是單純的使數字轉型,則會使用隱性轉型的方式

int number = 6
string str = number + "";

加一個空字串,因為運算子 + 使 number 變成字串後與空字串相加成 str。

字串

字串的處理就會比數值多很多了,如尋找、替換、切割、補零等等功能。

Format

主要是字串的拼接

string a1 = "555";
string a2 = "666";
string a3 = string.Format ("a1 = {0}, a2 = {1}", a1, a2);
Console.WriteLine (a3); // a1 = 555, a2 = 666

Format 是用括弧內的數字,從 0 開始數對照到後面的引數內容,要注意的是括弧的數值一定要對照到後面的引數,無法像這樣string.Format ("a1 = {8}", a1);,找不到第 8 + 1 個引數會使程式錯誤,但如果是給予超過數量的引數不會造成程式錯誤。

而講到 Format 是不是似曾相識的感覺,很像我之前寫的$語句,在字串前面加入$就是一種 Format 的方法,可以把上面的程式碼改成$"a1 = {a1}";,是不是更好讀了,雖然實際上還是做了跟 Format 一樣的行為,但讓程式碼讀得時候,如果引數一多就不用在那邊連連看了。

想知道更多可以參考連結的字串內插補點。

題外話:因為$我本身不再用 Format,對我在初學時是沒有看過這符號的。

Null 檢查方式

String.IsNullOrEmpty (value)

相當於 (value == null || value == String.Empty)

String.IsNullOrWhiteSpace (value)

相當於 (String.IsNullOrEmpty (value) || value.Trim ().Length == 0)

為什麼需要做 Null 檢查呢?因為原生方法如果變數內容是 null 的話是會報錯的,這邊簡單比較兩種方式的差別,個人是都只用最後一種啦。

Contains

這邊開始就是原生方法了,檢查字串是不是包含某個字元或字串,傳回值為 bool。

string str1 = "ABC";
bool b1 = str1.Contains ("BC");
bool b2 = str1.Contains ("CB");
Console.WriteLine (b1); // True
Console.WriteLine (b2); // False

PadLeft & PadRight

補充字元,因為數值型態前面不會帶 0,如果需要以 0 開頭的話則需要轉換成字串,並將開頭補 0,或者補空白排版等用途。

string str = "516".PadLeft (5, '0');
Console.WriteLine (str); // 00516

前面一位為數量,後面為補上的字元,可不填,不填時為補充空白。

PadRight 則是從右邊補字元。

Replace

取代字串內容,如果需要將 1 2 3 改成中文數字一、二、三。

string str = "123".Replace ("1", "一").Replace ("2", "二").Replace ("3", "三");
Console.WriteLine (str); // 一二三

Split

字串切割。

string.Split (params char[] separator)

用字元做為切割,不加任何條件版本。

string.Split (string[] separator, int count, StringSplitOptions options)

separator 為切割的字元組或字串組 char[] or string[]

count 為分割最大數量

"stringsplit".Split (new char[]{'s'}, 1); // {"stringsplit"}
"stringsplit".Split (new char[]{'s'}, 2); // {"","tringsplit"}
"stringsplit".Split (new char[]{'s'}, 3); // {"","tring","plit"}

options 為是否包含空白字元

  • StringSplitOptions.None => (預設)包含
  • StringSplitOptions.RemoveEmptyEntries => 不包含
"stringsplit".Split (new char[] { 's' }, 2, StringSplitOptions.RemoveEmptyEntries); // {"tring","plit"}

Substring

擷取字串。

string str = "123456789".Substring (1, 5);
Console.WriteLine (str); // 23456

從 0 開始數,所以 1 的位置是 2,然後往後數五個字元。

也可以不加數量

string str = "123456789".Substring (1);
Console.WriteLine (str); // 23456789

Trim

移除開頭與結尾字元,直到下個字元不等於該字元,如果不給引數則移除空白。

string str = "9129345678999".Trim ('9');
Console.WriteLine (str); // 129345678

TrimStart 只移除開頭字元

TrimEnd 只移除結尾字元

一些小結論

今天大致上介紹了本人比較常見的型別方法,雖然還滿猶豫要寫出來的,但日後使用的時候又需要解釋,不如就...

昨天在講解方法的時候沒有提到,VSCode 可以按 F12 查看方法,所以上述的所有方法都可以按 F12 顯示類別的方法,因為是引用 dll 所以沒有完整的 code,但可以看該類別的所有方法,所以除了我舉例的這些還有很多方法。

類別是什麼之後也會提到,還有如何增加類別的原生方法,也就是擴充方法。

感謝閱讀。

參考連結
標準數值格式字串 | Microsoft Docs
字串內插補點


上一篇
DAY 07 方法
下一篇
DAY 09 陳述式(四)
系列文
.net 後端起手式 30天認識 C# 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言