練習 - 檢查 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

  1. 刪除或使用行註解運算子 //,將上一個練習中的所有程式碼標記為註解。

  2. 在 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.");
    }
    
  3. 檢查這行程式碼:

    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 初始化,因此其應該可以同時透過屬於 ifelse 陳述式的程式碼區塊內部,以及其外部存取。

    out 關鍵字會指示編譯器,其 TryParse() 方法不僅以傳統方式傳回值 (作為傳回值),同時也會透過這個雙向參數傳達輸出。

    當執行程式碼時,應該會看見下列輸出:

    Measurement: 102
    

稍後在程式碼中使用剖析的 int

  1. 若要示範 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}");
    
  2. 在 Visual Studio Code 的 [檔案] 功能表上,選取 [儲存]。 在建置或執行程式碼之前,必須先儲存 Program.cs 檔案。

  3. 在 [總管] 面板中,若要在 TestProject 資料夾位置開啟 [終端],請以滑鼠右鍵按一下 [TestProject],然後選取 [在整合式終端機中開啟]。 終端窗格應開啟,且應包含命令提示字元,顯示已對 TestProject 資料夾位置開啟終端。

  4. 在終端命令提示字元中,若要執行程式碼,請輸入 dotnet run,然後按 Enter 鍵。

    注意

    如果您看到訊息指出「找不到要執行的專案」,請確定終端命令提示字元會顯示預期的 TestProject 資料夾位置。 例如:C:\Users\someuser\Desktop\csharpprojects\TestProject>

    您應該會看見下列輸出:

    Measurement: 102
    Measurement (w/ offset): 152
    
  5. 探討上一個範例中的最後一行程式碼 Console.WriteLine($"Measurement (w/ offset): {50 + result}");,因為 result 變數是在 if 陳述式之外定義,所以稍後可以在程式碼中存取。

將字串變數修改為無法剖析的值

最後,查看另一個案例,在此案例中,我們故意提供 TryParse() 一個不能轉換成 int 的錯誤值。

  1. 修改程式碼的第一行,將變數 value 重新初始化為不同的值。

    string value = "bad";
    
  2. 此外,請修改最後一行的程式碼,以確保結果大於 0,再顯示第二個訊息。

    if (result > 0)
       Console.WriteLine($"Measurement (w/ offset): {50 + result}");
    
  3. 現在整個程式碼範例應該符合下列程式碼:

    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}");
    
  4. 儲存您的程式碼檔案,然後使用 Visual Studio Code 來執行程式碼。 您應該會得到下列結果:

    Unable to report the measurement.
    
  5. 檢查上一個範例中新增的最後兩行程式碼。

    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

檢定您的知識

1.

應該使用哪一種技術將 myInputstring"2.71828",變更為 decimal 變數 myInputDecimal

2.

哪一項最能描述 decimal.TryParse() 的傳回類型?