C# 陳述式

Tip

本文屬於 基礎部分, 適合已經至少懂一種程式語言並正在學習 C# 的開發者。 如果你是程式新手,建議先從 入門 教學開始。 完整的語句語法,請參見 C# 語言規範中的 語句

來自另一種語言? 宣告、條件、迴圈和返回可能很熟悉。 C# 使用自身的語法與分類來處理這些功能,本文將介紹這些功能。

陳述句是一個完整的命令:「做這個。」程式中的語句組合成一個程式從頭到尾遵循的配方。 大多數語句是依序執行的。 分支選擇執行哪些步驟,迴圈則重複步驟。

這個範例宣告一個數量,顯示出來,然後用一個 if 陳述來決定是否要補貨:

int quantity = 5;
Console.WriteLine($"Quantity: {quantity}"); // => Quantity: 5

if (quantity < 10)
{
    quantity = 10;
    Console.WriteLine("Restocked"); // => Restocked
}

Console.WriteLine($"Quantity: {quantity}"); // => Quantity: 10

在看其部分之前,先把範例當作完整的指令來閱讀。 宣告、第一次呼叫 Console.WriteLine、整個 if 結構,以及最後一次呼叫 Console.WriteLine ,都是陳述。 陳述式內部 if 的區塊包含另外兩個陳述。

語句通常包含表達式

語句 通常包含表達式,這些是產生數值的程式碼片段。 在前述範例中,整個 if 構念是一個陳述。 其條件 quantity < 10 是一個會產生 truefalse 其中之一的運算式。

宣告陳述式會引入一個本地變數或常數。 初始化器表達式可以提供其第一個值:

int quantity = 5;

完整行是宣告語句。 初始化器 5 是該陳述中的一個表達式。

賦值表達式將值儲存在變數、屬性、索引器或其他儲存位置。 C# 允許指派運算式構成運算式陳述式

quantity = 10;

此陳述執行一個動作,而非僅計算一個值。 方法呼叫與遞增操作也是常見的表達式陳述:

Console.WriteLine("Restocking");
quantity++;

只有以下表達式形式能成為表達式陳述:

  • 工作分派表達式
  • 方法呼叫表達式
  • 物件建立表達式
  • 前綴或後綴的增減表達式
  • await 表達式

不是每個表達都能獨立成為陳述。 例如,quantity + 1; 計算出一個值,但沒有使用它。 這不是一句有效的說法。

這裡有一個有用的工作定義:陳述大致像英文的完整句子,而 表達 式則像片語。 這種區分幫助你理解文件和規範中會遇到的形式術語與說明,雖然一般編碼很少需要你有意識地記住這個區分。

將陳述式分組成區塊

一個 區塊 將零個或多個大括號{ (和 })之間的陳述分組。 C# 將群組視為一個陳述。 在開頭的範例中,該 if 陳述句可以同時執行賦值與呼叫 Console.WriteLine ,因為區塊將它們分組為一個實體。 方塊可以巢狀放置在其他方塊內。

選擇語句與迭代語句稱其主體為 嵌入式語句。 這個主體可以是沒有大括號的一個陳述,也可以是將多個陳述分組的區塊。

即使正文只包含一個陳述,也偏好區塊。 大括號顯示哪些陳述屬於正文,並防止後續編輯誤將陳述置於正文外。

區塊定義可變範圍

在區塊中宣告的變數從宣告開始到該區塊結束,都是在作用域內。 巢狀區塊可以使用包覆區塊宣告的變數,但包圍區塊不能使用僅在巢狀區塊中宣告的變數:

int outerValue = 10;

if (outerValue > 0)
{
    int innerValue = outerValue * 2;
    Console.WriteLine(innerValue); // => 20
}

// innerValue isn't in scope here.

為任務選擇一個陳述

在你辨識出語句為指令後,你可以依用途從不同類型中選擇:

  • 宣告資料:宣告陳述導入 本地變數與常數。
  • 執行動作: 表達式陳述式用於指派值、呼叫方法、建立物件、遞增或遞減值,或等待非同步操作。
  • 選擇步驟:選擇語句,如 ifswitch,選擇執行的程式碼。
  • 重複步驟:重複陳述句,如 foreachwhilefor、 重複陳述或區塊。
  • 轉移控制權:跳轉語句,如 breakcontinuereturnyield,將執行移至另一點。
  • 處理異常:例外處理語句,如 trycatchthrow,會回應或回報錯誤。
  • 資源管理:using 聲明 確保資源被處置。
  • 使用專門行為:checkeduncheckedfixed、 和 lock 陳述支持特定情境。

C# 語言規格

如需詳細資訊,請參閱 C# 語言規格語句一節。

另請參閱