練習 - 檢查 TryParse() 方法
使用資料時,您需要將字串資料轉換成數值資料類型。 如同您在上一個單元中所學,因為字串資料類型可以保存非數值,所以從 string
轉換成數值資料類型可能會導致執行階段錯誤。
例如,下列程式碼:
string name = "Bob";
Console.WriteLine(int.Parse(name));
會產生下列例外狀況:
System.FormatException: 'Input string was not in a correct format.'
若要避免格式例外狀況,請在目標資料類型上使用 TryParse () 方法。
Use TryParse()
TryParse() 方法會同時執行數項操作:
- 此方法會嘗試將字串剖析為指定的數值資料類型。
- 如果成功的話,它會將轉換的值儲存在 out 參數中,如下一節所述。
- 會傳回
bool
,指出動作是成功或失敗。
您可以使用布林值傳回值對值採取動作 (例如執行一些計算),或在剖析作業失敗時顯示訊息。
注意
在本練習中,您會使用的是 int
資料類型,但在所有數值資料類型上都可以使用類似的 TryParse()
方法。
Out 參數
方法可以傳回值或傳回 "void",這表示不會傳回任何值。 方法也可以透過 out
參數傳回值,這些值的定義方式就和任何其他的輸入參數相同,但包含 out
關鍵字。
將字串 TryParse() 至 int
刪除或使用行註解運算子
//
,將上一個練習中的所有程式碼標記為註解。在 Visual Studio Code 編輯器更新您的程式碼,如下所示:
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))
呼叫使用
out
參數的方法時,您必須在變數之前使用關鍵字out
,這會保留值。out
參數會指派給程式碼(int.TryParse(value,
out result
)
中的result
變數。 然後,您可以使用變數result
在程式碼的其餘部分中使用out
參數所包含的值。如果
int.TryParse()
方法成功將string
變數value
轉換為int
,則傳回true
;否則,其會傳回false
。 因此,請將此陳述式包圍在if
陳述式中,並根據該陳述式執行決策邏輯。轉換的值會儲存在
int
變數result
中。 在這行程式碼之前,會宣告並將int
變數result
初始化,因此其應該可以同時透過屬於if
和else
陳述式的程式碼區塊內部,以及其外部存取。out
關鍵字會指示編譯器,其TryParse()
方法不僅以傳統方式傳回值 (作為傳回值),同時也會透過這個雙向參數傳達輸出。當執行程式碼時,應該會看見下列輸出:
Measurement: 102
稍後在程式碼中使用剖析的 int
若要示範
result
先前宣告的變數,是由out
參數填入,而且稍後也可在程式碼中使用,請在 Visual Studio Code 編輯器中更新程式碼,如下所示:string value = "102"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); } Console.WriteLine($"Measurement (w/ offset): {50 + result}");
在 Visual Studio Code 的 [檔案] 功能表上,選取 [儲存]。 在建置或執行程式碼之前,必須先儲存 Program.cs 檔案。
在 [總管] 面板中,若要在 TestProject 資料夾位置開啟 [終端],請以滑鼠右鍵按一下 [TestProject],然後選取 [在整合式終端機中開啟]。 終端窗格應開啟,且應包含命令提示字元,顯示已對 TestProject 資料夾位置開啟終端。
在終端命令提示字元中,若要執行程式碼,請輸入 dotnet run,然後按 Enter 鍵。
注意
如果您看到訊息指出「找不到要執行的專案」,請確定終端命令提示字元會顯示預期的 TestProject 資料夾位置。 例如:
C:\Users\someuser\Desktop\csharpprojects\TestProject>
您應該會看見下列輸出:
Measurement: 102 Measurement (w/ offset): 152
探討上一個範例中的最後一行程式碼
Console.WriteLine($"Measurement (w/ offset): {50 + result}");
,因為result
變數是在 if 陳述式之外定義,所以稍後可以在程式碼中存取。
將字串變數修改為無法剖析的值
最後,查看另一個案例,在此案例中,我們故意提供 TryParse()
一個不能轉換成 int
的錯誤值。
修改程式碼的第一行,將變數
value
重新初始化為不同的值。string value = "bad";
此外,請修改最後一行的程式碼,以確保結果大於 0,再顯示第二個訊息。
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");
現在整個程式碼範例應該符合下列程式碼:
string value = "bad"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); } if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");
儲存您的程式碼檔案,然後使用 Visual Studio Code 來執行程式碼。 您應該會得到下列結果:
Unable to report the measurement.
檢查上一個範例中新增的最後兩行程式碼。
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");
由於
result
是在if
陳述式之外定義的,因此result
可以稍後在程式碼區塊外部的程式碼中存取。 因此,在允許將result
+ 位移值寫入為輸出之前,可以先檢查result
是否有大於零的值。 檢查result
的值是否大於零,可避免在Unable to report the measurement.
訊息之後列印位移值。
概括回顧
TryParse()
方法是很重要的工具。 以下是一些要記住的快速概念。
- 將字串轉換成數值資料類型時,請使用
TryParse()
。 - 如果轉換成功,
TryParse()
會傳回true
;如果不成功,則傳回false
。 - Out 參數提供了一種方法返回值的次要方式。 在此案例中,
out
參數會傳回轉換後的值。 - 將引數傳入已定義
out
參數的方法時,請使用關鍵字out
。