---
# System prepended metadata

title: C#語法糖-範圍運算符
tags: [語法特性, 語法糖, C#]

---

C# 的範圍運算符（Range operator）是在 C# 8.0 中引入的一個功能，主要用於簡化對陣列、Span<T>、或 ReadOnlySpan<T> 等數據類型的部分範圍（子序列）的訪問。這個功能對於處理資料切片（slicing）非常有用，尤其是在你需要操作或提取陣列的特定部分時。

### 範圍運算符的基本語法

範圍運算符使用一對方括號與兩個點 `..` 來定義範圍。範圍的兩邊可以是數字索引，或者是兩個索引運算符（`^`）表示從結尾開始的倒數位置。這里有一些基本用法：

1. **正向範圍**：`start..end` 表示從 `start` 索引開始，到 `end` 索引的前一個位置結束。例如，`0..5` 表示從第 0 個元素到第 4 個元素。

2. **開放範圍**：
   - 使用 `..end` 表示從序列開始到 `end` 的前一個位置。
   - 使用 `start..` 表示從 `start` 索引開始到序列結尾。
   - 單獨的 `..` 表示整個範圍。

3. **倒數索引**：使用 `^` 符號可以表示倒數索引。例如，`^1` 表示倒數第一個元素，而 `1..^1` 表示從第 1 個元素開始到倒數第一個元素的前一個位置結束。

### 範圍運算符的實際例子

假設你有一個整數陣列如下：

```csharp
int[] numbers = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
```

以下是一些範圍運算符的使用示例：

- **取得前五個元素**：

  ```csharp
  int[] firstFive = numbers[..5];
  ```

- **取得最後五個元素**：

  ```csharp
  int[] lastFive = numbers[^5..];
  ```

- **取得中間的元素**：

  ```csharp
  int[] middle = numbers[3..8]; // 從索引 3 到 7 的元素
  ```

- **取得除了最後一個元素外的所有元素**：

  ```csharp
  int[] allButLast = numbers[..^1];
  ```

範圍運算符提供了一種更直觀且簡潔的方式來操作數據的子集，讓開發者可以輕鬆地根據需要提取或操作數據的特定部分，這在資料處理和分析的應用中非常實用。