🔪 Slice Arrays Like Python
Array.Copy() for slicing? Verbose. Index (^) and Range (..) operators make it elegant.
Index from End (^)
var numbers = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// Old way: Last element
var last = numbers[numbers.Length - 1];
// New way: ^1 means "1 from end"
var last = numbers[^1]; // 9
// Second from end
var secondLast = numbers[^2]; // 8
// Third from end
var third = numbers[^3]; // 7
Range Slicing (..)
var numbers = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// First 3 elements
var first3 = numbers[0..3]; // { 0, 1, 2 }
// Skip first 3, get rest
var rest = numbers[3..]; // { 3, 4, 5, 6, 7, 8, 9 }
// Last 3 elements
var last3 = numbers[^3..]; // { 7, 8, 9 }
// Everything except last 2
var allButLast2 = numbers[..^2]; // { 0, 1, 2, 3, 4, 5, 6, 7 }
// Middle elements (skip first 2 and last 2)
var middle = numbers[2..^2]; // { 2, 3, 4, 5, 6, 7 }
// All elements (copy)
var copy = numbers[..];
🎯 Real-World Examples
// String slicing string text = "Hello, World!"; var hello = text[..5]; // "Hello" var world = text[7..^1]; // "World" // List slicing var items = new List{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; var firstHalf = items[..5]; // { 1, 2, 3, 4, 5 } // Pagination int page = 2; int pageSize = 3; var pageItems = items[(page * pageSize)..((page + 1) * pageSize)]; // Remove header and footer var lines = File.ReadAllLines("data.txt"); var dataOnly = lines[1..^1]; // Skip first and last line
💡 Cheat Sheet
| Syntax | Meaning |
|---|---|
^1 |
Last element |
^n |
n-th from end |
[..3] |
First 3 elements |
[3..] |
From index 3 to end |
[^3..] |
Last 3 elements |
[2..5] |
Elements 2, 3, 4 |
“CSV parsing code was full of substring calculations. Switched to ranges. Code is 50% shorter, infinitely more readable. No more off-by-one errors.”
