練習 - 使用隱含資料轉換執行加法

已完成

您經常會想要對數值資料執行數學運算。 在本單元中,您會從加法開始,然後在下一個單元中再擴展至其他運算,這是因為我們必須先了解 C# 編譯器如何剖析和解讀程式碼。

將兩個數值相加

為了將兩個數字相加,您將會使用「加法運算子」,也就是加號 +。 沒錯,就是您用於字串串連及加法的加號 +。 將同一個符號重複用於多個目的稱為「對運算子進行多載」,這經常會在 C# 中發生。

在此情況下,C# 編譯器會了解所正在嘗試執行的動作。 編譯器會剖析程式碼,並看到 + (運算子) 是由兩個數值 (運算元) 所環繞。 根據變數的資料類型 (兩者都是 int),其了解您要將這兩個值相加。

  1. 在 .NET 編輯器中輸入下列程式碼:

    int firstNumber = 12;
    int secondNumber = 7;
    Console.WriteLine(firstNumber + secondNumber);
    
  2. 執行程式碼,您即可在輸出主控台中看到下列結果:

    19
    

混合資料類型來強制執行隱含類型轉換

如果您嘗試搭配 stringint 值使用 + 符號,會發生什麼事?

  1. 修改您所撰寫的程式碼,以符合下列程式碼:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + widgetsSold + " widgets.");
    
  2. 執行程式碼,您即可在輸出主控台中看到下列結果:

    Bob sold 7 widgets.
    

在此情況下,C# 編譯器會了解您想要使用 + 符號來對兩個運算元進行串連。 它之所以能推斷出此情況,是因為 + 符號是由 stringint 資料類型的運算元所環繞。 因此,它會嘗試將 int 變數 widgetsSold 隱含地暫時轉換為 string,來將它串連至剩餘的字串。 C# 編譯器會儘可能嘗試協助您,但在理想的情況下,您應該會明瞭自己的意圖。

嘗試執行將數字相加及串連字串的更進階案例

  1. 修改您所撰寫的程式碼,以符合下列程式碼:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + widgetsSold + 7 + " widgets.");
    
  2. 執行程式碼,您即可在輸出主控台中看到下列結果:

    Bob sold 77 widgets.
    

編譯器會將所有內容視為字串,並將它們全都串連在一起,而不會將 int 變數 widgetsSold 新增至常值 int 7

新增括弧以向編譯器釐清您的意圖

  1. 修改您所撰寫的程式碼,以符合下列程式碼:

    string firstName = "Bob";
    int widgetsSold = 7;
    Console.WriteLine(firstName + " sold " + (widgetsSold + 7) + " widgets.");
    
  2. 執行程式碼,您即可在輸出主控台中看到下列結果:

    Bob sold 14 widgets.
    

括弧符號 () 會成為另一個多載的運算子。 在此情況下,左括弧和右括弧會形成「運算順序」運算子,就如同您可能會用於數學公式中的一樣。 您指出想要先解析最裡面的括弧,這會導致系統先將 intwidgetsSold7 值相加。 在解析那部分之後,系統便會隱含地將結果轉換為字串,以將它與剩餘的訊息串連。

注意

您應該避免在單一程式碼中同時執行計算和串連。 此處的重點在於協助您了解如何從編譯器角度來檢視運算子與運算元。

概括回顧

以下是到目前為止您學習到關於 C# 中的數學運算知識:

  • 您可對數字執行如加法的數學運算。
  • 字串串連和加法都會使用加號 +。 這稱為「對運算子進行多載」,且編譯器會根據其正在運算的資料類型推斷出適當的使用方式。
  • 在可以的情況下,C# 編譯器會在開發人員明顯基於顯示目的想要串連代表數字的字串時,將 int 隱含地轉換為 string
  • 使用括弧來定義運算順序,明確地告知編譯器,您想要在執行其他運算之前先執行特定運算。