C#8.0新特性之Index、Range类型

作者 the7
发布于 2020年01月18日
评论 0
浏览 184

什么是Index、Range类型

这是C#8.0带来的两个新的类型,System.IndexSystem.Range,借助对应的两个运算符 ^..,让我们很方便就可以获取序列中某个或一段元素。

System.Index

System.Index表示索引类型,^指定的索引是相对于序列尾端。如^2表示从序列尾端、从右至左的第二个元素。这里始终记住 ^x等价于 list.length - x ,所以如果代码写成 list[^0],那么等价于 list[list.length-0],结果就会抛出异常。下边举例说明。

var list = new[]
{
    "我","爱","中","华","人","民","共","和","国"
};

System.Index idx1 = 0;
System.Index idx2 = ^0;
var idx3 = ^1; //var简写

Console.WriteLine(list[idx1]); //打印 我
Console.WriteLine(list[idx2]); //报错
Console.WriteLine(list[idx3]); //打印 国
Console.WriteLine(list[^2]);   //也可以直接写 ^2 ,打印 和

System.Range

System.Range表示序列的子范围,使用运算符x..y,表示取序列中x到y的一段数据,但不包括y。再举例说明

var rng1 = ..; //声明一个Range类型的变量
var rng2 = 2..;
var list = new[]
{
    "我","爱","中","华","人","民","共","和","国"
};

Console.WriteLine(string.Join("",list[rng1]));
//取全部,打印 我爱中华人民共和国

Console.WriteLine(string.Join("",list[rng2]));
//取2到后边所有,打印 中华人民共和国

Console.WriteLine(string.Join("",list[2..4]));
//取2到4,但不包括4,打印 中华

Console.WriteLine(string.Join("",list[..4]));
//取开始到4,但不包括4,打印 我爱中华

混合使用 Index、Range

var list = new[]
{
    "我","爱","中","华","人","民","共","和","国"
};

Console.WriteLine(string.Join("",list[^2..^0]));
//取倒数第二个至后边所有,打印 和国
//有人问为什么这里 ^0 不会报错,因为范围取值不包括后边

Console.WriteLine(string.Join("",list[^2..^6]));
//猜猜这个会报错吗?

0条评论

请先登录后发表评论
提交评论
标签云
css (1) less calc (1) C# (4) C#进制转换 (1) asp.net core (8) Authentication (1) 注销 (1) 登录 (1) 验证 (1) scroll-view (1) 微信小程序 (4) 滚动到底部 (1) StackExchange.Redis (1) google (1) 百度 (1) nginx (2) 大文件 (2) 微信小程序c#解密 (1) 微信小程序获取手机号 (1) openid (1) session_key (1) CDN (1) URL鉴权 (1) 阿里云 (1) async (1) await (1) 禁止下拉上滑效果 (1) Index类型 (1) Range类型 (1) dontent publish (1) dotnet publish在线生成器 (1) System.DrawingCore.GDIPlus报错 (1) centos (1) 中文字体 (1) SqlBulkCopy (1) SqlSugar (1) JWT (5) 认证 (3) RSA JWT (1) 非对称加密 (1) 写信 (1) 见字如面 (1) 优化建议 (2) 正确操作字符串 (1) Java (1) JWT退出 (1) RefreshToken (1) .NET Core网站开发框架 (1) Moz (3) 墨子 (1) JSON.NET (1) Newtonsoft (1) System.Text.Json (1) 自定义后台路径 (1) .netcore (1) quartz (2) 作业调度框架 (1) 作业调度 (1) 定时任务 (1) exception (1) 异常处理 (1) HttpClient (1) IHttpClientFactory (1) RDM (1) Redis (1) Redis Desktop Manager (1) RedisDesktopManager (1) linux (1) mac (1) windows (1) Could not get any response (1) postman (1) leetcode (2) 力扣 (1) 回文字符串 (1) 面试刷题 (1) centos7 (1) php安装 (1) 网易云插件 (1) 马甲App (1) Discuz插件 (1) 网易云音乐 (1) Blazor (1) 五子棋 (1) c#解题 (1) 最长连续序列 (1) Swagger (1) 在线文档 (1) blob (1) mp4 (1) 视频 (1) big file (1) 上传 (1) s (1) Azure (1) Azure Key Vault (1) Configuration (1) 密钥保管库 (1) Dapper安装 (1) Dapper是什么 (1) Dapper连接Mysql (1) Dapper连接SqlServer (1) dapper (1)