C#8.0中的索引与范围功能介绍

C#8.0中, 新增了一个索引与范围的功能, 为访问序列中的单个元素或范围提供了一种简洁的语法。

在没有提供索引功能之前, 我们需要访问序列中的某个元素, 我们可以利用下标或者部分函数进行获取元素的数据, 如:获取数组中最后一个元素:

            string[] arr = new string[]
            {
                "冰晶凤凰",
                "影流之主",
                "德玛西亚",
                "艾瑞利亚",
                "寒冰射手"
            };              

            var str1 = arr.Last(); //寒冰射手
            var str2 = arr[arr.Length - 1];  //寒冰射手

介绍索引

在使用的的过程中, 我们可以直接在数组集合类的下标中,直接声明索引, 或者间接声明Index 类型的索引, 关于索引的使用方法, 如下:

             string[] arr = new string[]
            {
                "冰晶凤凰",  //^5
                "影流之主",  //^4
                "德玛西亚",  //^3
                "艾瑞利亚",  //^2  = ...
                "寒冰射手"   //^1  =arr.Length-1
            };              //^0  =arr.Length  

            //使用索引 ^1 获取最后一个元素
            Console.WriteLine($"output:{arr[^1]}"); //output:寒冰射手
            Console.WriteLine("-------End-------");

            //创建索引 Index index=^1 获取最后一个元素
            Index index = ^1;
            Console.WriteLine($"output:{arr[index]}"); //output:寒冰射手
            Console.WriteLine("-------End-------");

介绍范围

8.0中, 提供了Range语法, 可以通过简单的语法声明, 即可获取到序列中的范围内所有元素, 而范围中,也支持索引的声明方式来创建范围, 使用示例如下:

## 下标中直接声明范围进行获取元素序列

             //使用范围 [0..2] 获取索引0和1的元素,不包含末尾索引2的元素
            string[] newarr = arr[0..2];  //冰晶凤凰、影流之主
            foreach (var r in newarr)
            {
                Console.WriteLine($"output:{r}");
            }
            Console.WriteLine("-------End-------");

            string[] index_range_xarr = arr[0..^1]; //指定开始和结束范围,  从0开始到倒数第二个
            foreach (var r in index_range_xarr)
            {
                Console.WriteLine($"output:{r}");  //输出: 冰晶凤凰、影流之主、德玛西亚、艾瑞利亚
            }
            Console.WriteLine("-------End-------");

## 单独创建Range进行获取元素序列

            Range range = 0..2; //单独声明范围
            string[] newarr = arr[range];  //冰晶凤凰、影流之主
            foreach (var r in newarr)
            {
                Console.WriteLine($"output:{r}"); //输出:冰晶凤凰、影流之主
            }
            Console.WriteLine("-------End-------");

## 不指定开始与结束的范围 (默认获取所有元素序列)

            string[] index_default_arr = arr[..];// 写法相当于 arr[0..^0],  获取arr中所有的元素
            foreach (var r in index_default_arr)
            {
                Console.WriteLine($"output:{r}");  //输出: 冰晶凤凰 、影流之主、德玛西亚、艾瑞利亚、寒冰射手
            }

## 指定开始或者结束的范围

             string[] index_end_arr = arr[..^0];// 写法相当于 arr[0..^0] , 获取arr中所有的元素
            foreach (var r in index_end_arr)
            {
                Console.WriteLine($"output:{r}"); //输出: 冰晶凤凰 、影流之主、德玛西亚、艾瑞利亚、寒冰射手
            }
            Console.WriteLine("-------End-------");

            string[] index_left_arr = arr[^2..];// 写法相当于 arr[^2..^0], 获取末尾的最后两个元素
            foreach (var r in index_left_arr)
            {
                Console.WriteLine($"output:{r}");  //输出: 艾瑞利亚 、寒冰射手
            }
            Console.WriteLine("-------End-------");

注:范围的结束如果有强制声明, 如 [0..2] , 那么获取的元素序列, 最终只是下标为 0和1 的元素, 不包含2的元素, 也就是说“末尾”不包含在范围内。

到此这篇关于C#8.0中的索引与范围功能的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 浅析C# 索引器(Indexer)

    索引器(Indexer) 允许一个对象可以像数组一样被索引.当您为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样.您可以使用数组访问运算符([ ])来访问该类的实例. 语法 一维索引器的语法如下: element-type this[int index] { // get 访问器 get { // 返回 index 指定的值 } // set 访问器 set { // 设置 index 指定的值 } } 索引器(Indexer)的用途 索引器的行为的声明在

  • C# 8.0中的范围类型(Range Type)示例详解

    前言 C# 语言是在2000发布的,至今已正式发布了7个版本,每个版本都包含了许多令人兴奋的新特性和功能更新.同时,C# 每个版本的发布都与同时期的 Visual Studio 以及 .NET 运行时版本高度耦合,这也有助于开发者更好的学习掌握 C#,并将其与 Visual Studio 以及 .NET 的使用结合起来. C# 8.0中加入了一个新的范围类型(Range Type). 这里我们首先展示一些代码,并一步一步为代码添加一些不同的东西, 为大家展示一下范围类型的功能和用法. 我们最原始

  • C# 索引器的使用教程

    概述 索引器(Indexer) 允许一个对象可以像数组一样使用下标的方式来访问. 当您为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样.您可以使用数组访问运算符 [ ] 来访问该类的的成员. 语法 一维索引器的语法如下: element-type this[int index] {    // get 访问器    get    {       // 返回 index 指定的值    }    // set 访问器    set    {       //

  • 详解c#索引(Index)和范围(Range)

    范围和索引为访问序列中的单个元素或范围提供了简洁的语法. 在本教程中,你将了解: 对某个序列中的范围使用该语法. 了解每个序列开头和末尾的设计决策. 了解 Index 和 Range 类型的应用场景. 对索引和范围的语言支持 此语言支持依赖于两个新类型和两个新运算符: System.Index 表示一个序列索引. 来自末尾运算符 ^ 的索引,指定一个索引与序列末尾相关. System.Range 表示序列的子范围. 范围运算符 ..,用于指定范围的开始和末尾,就像操作数一样. 让我们从索引规则开

  • 谈谈c#中的索引器

    概念 索引器(Indexer) 允许类中的对象可以像数组那样方便.直观的被引用.当为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样. 索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用. 可以使用数组访问运算符([ ])来访问该类的实例. 索引器的行为的声明在某种程度上类似于属性(property).属性可使用 get 和 set 访问器来定义索引器.但是属性返回或设置的是一个特定的数据成员,而索引器返回或设置对象实例的一个特定值. 定义一

  • 浅谈C#索引器

    目录 一.概要 二.应用场景 一.概要 索引器使你可从语法上方便地创建类.结构或接口,以便客户端应用程序可以像访问数组一样访问它们.编译器将生成一个 Item 属性(或者如果存在 IndexerNameAttribute,也可以生成一个命名属性)和适当的访问器方法.在主要目标是封装内部集合或数组的类型中,常常要实现索引器.例如,假设有一个类 TempRecord,它表示 24 小时的周期内在 10 个不同时间点所记录的温度(单位为华氏度).此类包含一个 float[] 类型的数组 temps,用

  • C#索引属性用法实例分析

    本文实例讲述了C#索引属性的用法.分享给大家供大家参考.具体如下: 这里演示C#类如何声明索引属性以表示不同种类事物的类似数组的集合. // indexedproperty.cs using System; public class Document { // 以下类型允许文档的查看方式与字的数组一样: public class WordCollection { readonly Document document; // 包含文档 internal WordCollection(Documen

  • C#索引器介绍

    索引器是一种特殊的类成员,它能够让对象以类似数组的方式来存取,使程序看起来更为直观,更容易编写. 1.索引器的定义 C#中的类成员可以是任意类型,包括数组和集合.当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作. 定义索引器的方式与定义属性有些类似,其一般形式如下: 复制代码 代码如下: [修饰符] 数据类型 this[索引类型 index] { get{//获得属性的代码} set{ //设置属性的代码} } 修饰符包括 public,protected,privat

  • C#8.0中的索引与范围功能介绍

    C#8.0中, 新增了一个索引与范围的功能, 为访问序列中的单个元素或范围提供了一种简洁的语法. 在没有提供索引功能之前, 我们需要访问序列中的某个元素, 我们可以利用下标或者部分函数进行获取元素的数据, 如:获取数组中最后一个元素: string[] arr = new string[] { "冰晶凤凰", "影流之主", "德玛西亚", "艾瑞利亚", "寒冰射手" }; var str1 = arr.

  • 利用js实现Vue2.0中数据的双向绑定功能

    Object.defineProperty了解 语法: Object.defineProperty(obj, prop, descriptor) obj  要定义属性的对象. prop 要定义或修改的属性的名称 descriptor 要定义或修改的属性描述符 obj和prop很好理解 比如我们定义一个变量为 const o = { name:'xbhog' } 其中obj指的就是o,prop指的就是o.name 下面我们主要看看descriptor descriptor  目标对象属性的一些特征

  • Smarty中的注释和截断功能介绍

    注释 复制代码 代码如下: {* 这是一个单行Smarty注释 来自于jb51.net,网页源代码里看不见*} {* 这是一个多行    Smarty注释    并不发送到浏览器 *} 模板注释由星号包围,继而由分隔符包围,型如:{* 这是一个注释 *}.Smarty注释不会在最终模板的输出中显示,这点和不同.前者对于在模板中插入内部注释有用,因为没有人能看到.;-) http://www.itlearner.com/code/smarty_cn/language.basic.syntax.ht

  • vue3.0中setup使用(两种用法)

    一.setup函数的特性以及作用 可以确定的是 Vue3.0 是兼容 Vue2.x 版本的 也就是说我们再日常工作中 可以在 Vue3 中使用 Vue2.x 的相关语法 但是当你真正开始使用 Vue3 写项目时 你会发现他比 Vue2.x 方便的多 Vue3 的一大特性函数 ---- setup 1.setup函数是处于 生命周期函数 beforeCreate 和 Created 两个钩子函数之间的函数 也就说在 setup函数中是无法 使用 data 和 methods 中的数据和方法的 2.

  • vue3.0中使用element的完整步骤

    前言: 在vue3.0中使用element框架,因为element是支持vue2.0的,他推出的支持vue3.0的版本叫 element-plus 官网入口:点我进入 一.个人遇到的问题与解决办法: 遇到的问题: 我直接用cnpm  i element-plus -S 装的版本,不知道为啥,一直报错 图1,版本型号 图2 ,我的代码中使用图3 解决办法: 我把package.json中的element-plus的版本更换成    下面这句话,解决了问题(是否为最新版本问题,还在求证中) "ele

  • MySQL8.0中的降序索引

    前言 相信大家都知道,索引是有序的:不过,在MySQL之前版本中,只支持升序索引,不支持降序索引,这会带来一些问题:在最新的MySQL 8.0版本中,终于引入了降序索引,接下来我们就来看一看. 降序索引 单列索引 (1)查看测试表结构 mysql> show create table sbtest1\G *************************** 1. row *************************** Table: sbtest1 Create Table: CREAT

  • Vue.js2.0中的变化小结

    最近自己在学习Vue.js,在看一些课程的时候可能Vue更新太块了导致课程所讲知识和现在Vue的版本不符,从而报错,我会在以后的帖子持续更新Vue的变化与更新,大家也可以一起交流,共同监督学习! 1.关于Vue中$index获取索引值已经取消,多用于多个元素的操作,像ul中的li,通过v-for来建立多个li,如果对于其中的某个或者一些li操作的话,需要使用到索引值,用法如下; <template> <div class="hello"> <h1>{

  • swift 3.0中实现字符串截取、比较的方法示例

    前言 字符串处理一直都是程序开发中不可避免的,而字符串截取/替换操作更是频繁.swift3.0 中不能直接使用下标数字进行字符串解决,只能使用String.Index来做位置索引,要想实现截取功能首先得获取到String.Index; 下面话不多说了,来一起看看详细的介绍吧. 实例代码 下面两段代码获取开头可结尾,获取中间部分参数用Range<Index>即可: 获取结尾两个字符子串: let sessionId = "this is a test" let index =

  • Oracle数据库中建立索引的基本方法讲解

    怎样建立最佳索引? 1.明确地创建索引 create index index_name on table_name(field_name) tablespace tablespace_name pctfree 5 initrans 2 maxtrans 255 storage ( minextents 1 maxextents 16382 pctincrease 0 ); 2.创建基于函数的索引 常用与UPPER.LOWER.TO_CHAR(date)等函数分类上,例: create index

  • 在ASP.NET 2.0中操作数据之一:创建一个数据访问层

    导言 作为web开发人员,我们的生活围绕着数据操作.我们建立数据库来存储数据,写编码来访问和修改数据,设计网页来采集和汇总数据.本文是研究在ASP.NET 2.0中实现这些常见的数据访问模式之技术的长篇系列教程的第一篇.我们将从创建一个软件框架开始,这个框架的组成部分包括一个使用强类型的DataSet的数据访问层(DAL),一个实施用户定义的业务规则的业务逻辑层(BLL),以及一个由共享页面布局的ASP.NET网页组成的表现层.在打下这个后端的基础工作之后,我们将开始转向报表,示范如何显示,汇总

随机推荐