前言
C#跟其他程式語言最大的差別,在於它有嚴格規定資料型態,省下空間的同時也能讓運作效率提升,不過也因此會有轉型態的需求,像是把數字轉換成字串這種操作就會視需要的。
這篇文章將會講述 C#中資料型態轉換的方式,並藉由官方的範例來介紹各個關鍵字和陳述式,說明他們的運作原理。
簡介
我們可能需要讓字串資料進行數學運算(例如int),或使用字串差補來格式化輸出數值,當了解 C# 編譯器的主要考量時,就更容易了解其以特定方式運作的原因。
資料轉換的技術
資料轉換在C#中有三種比較常見的方法,分別是:
- 在資料類型上使用協助程式方法。
- 在變數上使用協助程式方法。
- 使用 Convert 類別的方法。
轉換運算子 | ()
使用(int)等運算子來轉換,這種轉換較為強硬,如果轉換失敗會出錯,其中,string不能轉數值類(int、float等)。
放大轉換
將值從較少資訊的資料類型,轉換成可能保存較多資訊的資料類型,在此情況不會遺失任何資訊,譬如 從整數 3 轉換成 3.000,在這種情況下就不會遺失任何資訊。
縮小轉換
將值從較多資訊的資料類型,轉換成只能保存較少資訊的資料類型,可能遺失有效位數(例如小數),當確定使用縮小傳換時,必須執行轉型,以下為範例:
decimal myDecimal = 3.14m;
Console.WriteLine($"decimal: {myDecimal}");
int myInt = (int)myDecimal;
Console.WriteLine($"int: {myInt}");
上述為將常用於科學數值的 decimal 轉換成 int,因此會出現位數流失的問題。
ToString()
使用此方法將數字轉換成字串,雖然並非必要手段,但可以讓其他程式員了解我們在幹嘛。
Parse()
大部分的數值資料類型都擁有此方法,它會將字串轉換成城指定的資料類型,譬如:將兩個string轉換成int,不過如果遇到無法轉換的情況會出問題。
int.parse(string);
Convert
此類別將字串轉換成數字
string value1 = "5";
string value2 = "7";
int result = Convert.ToInt32(value1) * Convert.ToInt32(value2);
Console.WriteLine(result);
適合的方法
如果是放大轉換,可以依賴編譯器來執行轉換,不過如果是縮小轉換就會需要使用Convert類別,當確定轉換沒有問題時,可以使用轉換運算子。
TryParse()
將字串資料轉換成數值資料,避免轉換資料類型造成執行階段的錯誤,例如:
string name = "Bob";
Console.WriteLine(int.Parse(name));
會跳以下錯誤
System.FormatException: 'Input string was not in a correct format.'
執行操作
在所有數值資料類型上都可以使用:
- 此方法會嘗試將字串剖析為指定的數值資料類型。
- 如果成功,此方法會將轉換後的值儲存在 out 參數中。
- 它將返回一個布林值,指示操作是成功還是失敗。
out參數
方法可返回值或返回void,方法還可以透過out參數返回值,定義與輸入參數相同但包含關鍵字out。
使用out參數調用方法時,必須在變量前使用關鍵字out來保存值,並可在代碼其他部分使用。
string value = "102";
int result = 0;
if (int.TryParse(value, out result))
{
Console.WriteLine($"Measurement: {result}");
}
else
{
Console.WriteLine("Unable to report the measurement.");
}
其中關注這一行
if (int.TryParse(value, out result))
如果int.TryParse()方法將string變數value轉換成int,則會傳回 true;否則會傳回 false,故將此陳述式包圍在 if 陳述式中,並根據該陳述式執行決策邏輯。
其中,轉換後的值會儲存在result,簡單來說,int.TryParse()會回傳bool,它的作用是把左邊的值轉換成int儲存在右邊,失敗False成功True。
特殊之處在於,這個result可以同時透過程式碼區塊內部和外部存取,所以out關鍵字會指示編譯器雙向參數傳達輸出。
TryParse()的重要性
- 將字串轉換成數值資料類型時,請使用 TryParse()。
- 如果转换成功,TryParse() 会返回 true;如果失败,则会返回 false。
- out 參數提供傳回值之方法的次要方式。 在此案例中,out 參數會傳回轉換後的值。
- 將引數傳入已定義 out 參數的方法時,請使用關鍵字 out。
後記
在程式設計中,c#被稱為是安全穩定的程式,那這個安全穩定的方式來源在哪裡呢?我覺得跟資料型態的嚴謹有關係,在資料型態上可以看到很多介紹,撰寫程式時也會因為資料型態而糾結很久,但熟悉以後,這些東西會加快撰寫效率和方便性。