Skip to content

Bits of .NET

Daily micro-tips for C#, SQL, performance, and scalable backend engineering.

  • Asp.Net Core
  • C#
  • SQL
  • JavaScript
  • CSS
  • About
  • ErcanOPAK.com
  • No Access
  • Privacy Policy
C#

C#: Use Index and Range for Clean Array Slicing

- 19.03.26 - ErcanOPAK

🔪 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.”

— Data Engineer

Related posts:

How to get rows count in EntityFramework without loading contents

Why lock(this) Can Deadlock Your Entire App

Hot Reload Configuration with IOptionsSnapshot

Post Views: 5

Post navigation

C#: Use Expression-Bodied Members for One-Liners
Visual Studio: Create Custom Code Snippets to Type Less Code

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

April 2026
M T W T F S S
 12345
6789101112
13141516171819
20212223242526
27282930  
« Mar    

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (950)
  • How to add default value for Entity Framework migrations for DateTime and Bool (858)
  • Get the First and Last Word from a String or Sentence in SQL (836)
  • How to select distinct rows in a datatable in C# (805)
  • How to make theater mode the default for Youtube (751)
  • Add Constraint to SQL Table to ensure email contains @ (578)
  • How to enable, disable and check if Service Broker is enabled on a database in SQL Server (564)
  • Average of all values in a column that are not zero in SQL (531)
  • How to use Map Mode for Vertical Scroll Mode in Visual Studio (489)
  • Find numbers with more than two decimal places in SQL (447)

Recent Posts

  • C#: Use Init-Only Setters for Immutable Objects After Construction
  • C#: Use Expression-Bodied Members for Concise Single-Line Methods
  • C#: Enable Nullable Reference Types to Eliminate Null Reference Exceptions
  • C#: Use Record Types for Immutable Data Objects
  • SQL: Use CTEs for Readable Complex Queries
  • SQL: Use Window Functions for Advanced Analytical Queries
  • .NET Core: Use Background Services for Long-Running Tasks
  • .NET Core: Use Minimal APIs for Lightweight HTTP Services
  • Git: Use Cherry-Pick to Apply Specific Commits Across Branches
  • Git: Use Interactive Rebase to Clean Up Commit History Before Merge

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (950)
  • How to add default value for Entity Framework migrations for DateTime and Bool (858)
  • Get the First and Last Word from a String or Sentence in SQL (836)
  • How to select distinct rows in a datatable in C# (805)
  • How to make theater mode the default for Youtube (751)

Recent Posts

  • C#: Use Init-Only Setters for Immutable Objects After Construction
  • C#: Use Expression-Bodied Members for Concise Single-Line Methods
  • C#: Enable Nullable Reference Types to Eliminate Null Reference Exceptions
  • C#: Use Record Types for Immutable Data Objects
  • SQL: Use CTEs for Readable Complex Queries

Social

  • ErcanOPAK.com
  • GoodReads
  • LetterBoxD
  • Linkedin
  • The Blog
  • Twitter
© 2026 Bits of .NET | Built with Xblog Plus free WordPress theme by wpthemespace.com