C#的范围运算符

举报
Rolle 发表于 2024/10/31 00:18:11 2024/10/31
【摘要】 在C# 8.0中,引入了两个新的运算符:范围运算符(…)和来自末尾的索引运算符(^),它们极大地简化了数组和字符串的索引和切片操作。这些新特性提供了一种更直观、更声明式的方式来处理集合中的元素。范围运算符(…)范围运算符允许你定义一个序列的子集,它的语法非常直观。例如,arr[1…4]会获取数组arr中从索引1到索引3的元素(即第二个到第四个元素,因为索引是从0开始的)。基本用法var ar...

在C# 8.0中,引入了两个新的运算符:范围运算符(…)和来自末尾的索引运算符(^),它们极大地简化了数组和字符串的索引和切片操作。这些新特性提供了一种更直观、更声明式的方式来处理集合中的元素。

范围运算符(…)
范围运算符允许你定义一个序列的子集,它的语法非常直观。例如,arr[1…4]会获取数组arr中从索引1到索引3的元素(即第二个到第四个元素,因为索引是从0开始的)。

基本用法
var array = new int[] { 1, 2, 3, 4, 5 };
var subArray = array[1…4]; // 获取从索引1到索引3的元素,即 { 2, 3, 4 }
省略边界
你还可以在范围表达式中省略开始或结束边界:
var allElements = array[…]; // 获取所有元素
var firstElements = array[…3]; // 获取从开始到索引2的元素
var lastElements = array[3…]; // 获取从索引3到末尾的元素
来自末尾的索引运算符(^)
这个运算符允许你从序列的末尾开始索引,^1表示最后一个元素,^2表示倒数第二个元素,依此类推。

基本用法
var lastElement = array[^1]; // 获取最后一个元素,等同于array[array.Length - 1]
var secondToLast = array[^2]; // 获取倒数第二个元素
结合使用
你可以将这两个运算符结合使用,以非常灵活的方式获取数组或字符串的子集。
var lastThreeElements = array[^3…]; // 获取最后三个元素
var middleElements = array[1…^2]; // 获取从第二个元素到倒数第二个元素的范围
在自定义集合中使用
为了在自定义集合中使用这些运算符,你的集合需要支持System.Index和System.Range类型。这意味着你可能需要在你的集合类中添加一些额外的方法或属性。

实现GetSubArray
例如,你可以通过实现一个GetSubArray方法来支持范围运算符:
public static T[] GetSubArray<T>(T[] array, Range range)
{
int start = range.Start.GetOffset(array.Length);
int length = range.End.GetOffset(array.Length) - start;
return array.Skip(start).Take(length).ToArray();
}
实现Index的GetOffset
对于Index类型,你需要实现一个GetOffset方法,它将Index转换为数组的索引:
public int GetOffset(int length)
{
if (this.fromEnd)
return length - this.value;
return this.value;
}

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。