





















最近是用Claude Opus的智能体帮我写代码,实现业务需求,在检查其写的代码块,发现对于数组的范围获取,多处使用了:..index、index..、^0等范围计算符号。这代码看上去很是简洁。 于是叫AI帮我写了这一篇博客,学习补充一下基础知识。

C# 中字符串切片语法 string[..index] 和 string[index..] 的核心区别,这两种写法都是 C# 8.0 引入的范围运算符(Range Operator),用于快速截取字符串的一部分,核心差异在于截取的区间方向不同。
先明确两个基础概念:
^:索引从末尾开始计数(^1 代表最后一个字符,^0 代表字符串末尾的 “空位置”);..:范围运算符,格式为 [起始索引..结束索引],遵循左闭右开原则(包含起始索引,不包含结束索引)。| 语法 | 含义 | 等价的传统写法(Substring) |
|---|---|---|
str[..index] |
截取从字符串开头到 index 位置(不包含 index)的子串 |
str.Substring(0, index) |
str[index..] |
截取从 index 位置(包含 index)到字符串末尾的子串 |
str.Substring(index) 或 str.Substring(index, str.Length - index) |
用一个具体字符串演示,结果更清晰:
string str = "HelloWorld"; // 长度 10,索引 0-9 int index = 5; // 1. str[..index]:从开头到索引5(不包含5) string part1 = str[..index]; Console.WriteLine(part1); // 输出:Hello(索引0-4) // 2. str[index..]:从索引5到末尾(包含5) string part2 = str[index..]; Console.WriteLine(part2); // 输出:World(索引5-9) // 扩展:结合^的反向索引 string part3 = str[..^3]; // 从开头到倒数第3个字符(不包含) Console.WriteLine(part3); // 输出:HelloWo(索引0-6) string part4 = str[^3..]; // 从倒数第3个字符到末尾 Console.WriteLine(part4); // 输出:rld(索引7-9)
index 超过字符串长度(比如 str[..15] 且 str.Length=10),会抛出 ArgumentOutOfRangeException;^n 中,n 不能大于字符串长度(比如 str[..^11] 会报错)。str[..0] 或 str[str.Length..] 都会返回空字符串;str[..str.Length] 等价于原字符串,str[0..] 也等价于原字符串。虽然切片语法和 Substring 功能重叠,但切片更简洁,尤其是结合反向索引时:
// 传统写法:取最后3个字符 string oldWay = str.Substring(str.Length - 3); // 切片写法:更直观 string newWay = str[^3..];
[..index] 是 “从头取到 index 前”,[index..] 是 “从 index 取到尾”;^ 让末尾截取更简洁;Substring。此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。