Index 类型与 ^ 运算符
从集合末尾引用元素。
Index 类型与 ^ 运算符 是 CoddyKit 上的免费 C# Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C# Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C# Academy 课程共包含 4 节课。
认识 Index 类型
C# 提供了专用的 System.Index 类型,用于描述序列中的位置。与普通的 int 不同,Index 不仅可以表示从集合开头开始计算的位置,还可以表示从集合末尾开始计算的位置。
这样一来,像“给我最后一个元素”这样的代码既直观又安全。
using System;
int[] numbers = { 10, 20, 30, 40, 50 };
Index first = 0;
Console.WriteLine(numbers[first]); // 10^(从末尾)运算符
尖帽运算符 ^ 会构造一个从末尾开始计数的 Index。^1 表示最后一个元素,^2 表示倒数第二个元素,依此类推。
请注意,^1 是最后一个有效索引,而 ^0 等于 Length,表示末尾之后的位置。
using System;
int[] numbers = { 10, 20, 30, 40, 50 };
Console.WriteLine(numbers[^1]); // 50 (last)
Console.WriteLine(numbers[^2]); // 40Index 作为一等值
Index 是一个真正的值,您可以将它存储在变量中、传递给方法并重复使用。这样可以将位置与集合分离开来。
using System;
int[] data = { 1, 2, 3, 4, 5 };
Index last = ^1;
Index secondLast = ^2;
Console.WriteLine(data[last]); // 5
Console.WriteLine(data[secondLast]); // 4IsFromEnd 与 Value
每个 Index 都提供两个属性:Value(整数偏移量)和 IsFromEnd(表示它是否使用 ^ 创建)。
using System;
Index fromStart = 2;
Index fromEnd = ^2;
Console.WriteLine(fromStart.Value + " " + fromStart.IsFromEnd); // 2 False
Console.WriteLine(fromEnd.Value + " " + fromEnd.IsFromEnd); // 2 TrueGetOffset 解析位置
只有知道集合长度后,从末尾开始计算的索引才有意义。Index.GetOffset(length) 会将它转换为具体的、从 0 开始计算的偏移量。
using System;
Index fromEnd = ^1;
int length = 5;
int offset = fromEnd.GetOffset(length);
Console.WriteLine(offset); // 4^0 位于末尾之后
由于 ^0 会解析为 Length,使用它进行索引会引发异常。它仅适合作为范围的不包含在内的上界,您将在下一课中看到这一点。
using System;
int[] data = { 1, 2, 3 };
try {
Console.WriteLine(data[^0]); // out of range!
} catch (IndexOutOfRangeException) {
Console.WriteLine("^0 is past the end");
}Index 适用于多种集合
任何具有索引器以及 Length 或 Count 属性,并提供相应支持的类型,都可以使用 Index。数组、string 和 Span<T> 都可以直接使用。
using System;
string word = "Coddy";
Console.WriteLine(word[^1]); // y
Console.WriteLine(word[^5]); // C动态计算索引
您可以对变量使用 ^ 运算符,从运行时整数构造一个 Index。
using System;
int[] data = { 5, 10, 15, 20 };
int n = 2;
Index idx = ^n; // ^ works on variables too
Console.WriteLine(data[idx]); // 15Index 与普通 int
普通的 int 始终从开头开始计数。Index 增加了从末尾开始计数的能力,同时仍可从 int 隐式转换,因此现有代码可以继续工作。
using System;
Index a = 1; // implicit from int
Index b = ^1; // from end
Console.WriteLine(a.IsFromEnd); // False
Console.WriteLine(b.IsFromEnd); // True避免差一错误
过去,要访问最后一个元素,需要写成 arr[arr.Length - 1]。使用 ^1 后,意图更加明确,也不再需要担心算术计算出错。
using System;
int[] scores = { 88, 92, 79, 95 };
Console.WriteLine(scores[scores.Length - 1]); // old way: 95
Console.WriteLine(scores[^1]); // new way: 95实际代码中的 Index
下面是一个小型辅助函数,它使用 ^1 返回任意数组中的最后一项,让调用位置保持简洁。
using System;
static T Last<T>(T[] items) => items[^1];
int[] nums = { 3, 6, 9, 12 };
Console.WriteLine(Last(nums)); // 12快速检查
检验您对 Index 类型和 ^ 运算符的理解。
回顾
您已经学会了,System.Index 表示一个位置:它可以从开头开始计数,也可以借助 ^ 运算符从末尾开始计数。
^1表示最后一个元素;^0等于Length,表示末尾之后的位置。Index提供Value、IsFromEnd和GetOffset(length)。- 它可以从
int隐式转换,并适用于数组、字符串和跨度。
用 AI 导师学习 C# — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 93
- 课程
- 346
常见问题解答
「Index 类型与 ^ 运算符」课时是免费的吗?
是的 — 「Index 类型与 ^ 运算符」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 4 节课。
「Index 类型与 ^ 运算符」这节课中我会学到什么?
从集合末尾引用元素。 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 C# Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「Index 类型与 ^ 运算符」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 C# Academy 课中编写并运行代码吗?
能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Index 类型与 ^ 运算符
- Range 类型与 .. 运算符
- 数组和字符串中的范围
- 支持范围的自定义类型