C# 8 范围类型 Range Type:

我们最原始的代码如下:

static void Main(string[] args)
{
var myArray = new string[]
{
"Item1",
"Item2",
"Item3",
"Item4",
"Item5"
};
for(int i=1; i <= 3; i++)
{
Console.WriteLine(myArray[i]);
}
Console.ReadLine();
}

这里我们显示的定义了我们查询数组的索引1-3, 并输出他们的值。毫无疑问,当我们运行程序之后,代码结果如下:

Item2

Item3

Item4

但是,假设我们不想使用for循环,而是想要使用这个名为“range”的新特性, 我们可以将代码重写为:

static void Main(string[] args){
var myArray = new string[]
{
"Item1",
"Item2",
"Item3",
"Item4",
"Item5"
};
foreach (var item in myArray[1..3])
{
Console.WriteLine(item);
}
Console.ReadLine();
}

结果:

Item2

Item3

结果比我们预想的少了一个。这是我们使用范围类型遇到的第一个问题。

范围的起始索引是包含的,范围的结束索引是排除的

所以要想拿到正确结果应该是:

static void Main(string[] args)
{
var myArray = new string[]
{
"Item1",
"Item2",
"Item3",
"Item4",
"Item5"
};
foreach (var item in myArray[1..4])
{
Console.WriteLine(item);
}
Console.ReadLine();
}

范围缩写:

从一个索引开始到数组的最后一个对象

static void Main(string[] args)
{
var myArray = new string[]
{
"Item1",
"Item2",
"Item3",
"Item4",
"Item5"
};
foreach (var item in myArray[1..])
{
Console.WriteLine(item);
}
Console.ReadLine();
}

输出结果:

Item2

Item3

Item4

Item5

从数组的第一个对象到指定索引

foreach (var item in myArray[..3])
{
Console.WriteLine(item);
}

输出结果:

Item1

Item2

Item3

整个数组:

foreach (var item in myArray[..])
{
Console.WriteLine(item);
}

输出结果:

Item1

Item2

Item3

Item4

Item5

从数组的某个索引开始一直到距数组尾部某个索引:

操作符,操作符表示从数组末尾计算索引。

foreach (var item in myArray[1..^1])
{
Console.WriteLine(item);
}

输出结果:

Item2

Item3

Item4

范围类型

当我们编写1..4的时候,看起来就好像我们在使用新的语法,实际上这只是个语法糖,实际上它初始化一个Range类对象,就好像我们可以使用{“1”, “2”, “3”}就可以创建一个数组一样

static void Main(string[] args)
{
var myArray = new string[]
{
"Item1",
"Item2",
"Item3",
"Item4",
"Item5"
};
Range range = 1..4;
foreach (var item in myArray[range])
{
Console.WriteLine(item);
}
Console.ReadLine();
}

替代Substring方法

使用范围类型的另一个好处就是你可以使用它替换String.Substring方法, 写起来更加简单

Console.WriteLine("123456789"[1..4]);

C# 8.0 范围类型 Range Type的更多相关文章

  1. C# 8中的范围类型(Range Type)

    C# 8.0中加入了一个新的范围类型(Range Type). 这里我们首先展示一些代码,并一步一步为代码添加一些不同的东西, 为大家展示一下范围类型的功能和用法. 我们最原始的代码如下: stati ...

  2. html <input>标签类型属性type(file、text、radio、hidden等)详细介绍

    html <input>标签类型属性type(file.text.radio.hidden等)详细介绍 转载请注明:文章转载自:[169IT-最新最全的IT资讯] html <inp ...

  3. Swift编程语言学习12 ——实例方法(Instance Methods)和类型方法(Type Methods)

    方法是与某些特定类型相关联的函数.类.结构体.枚举都能够定义实例方法:实例方法为给定类型的实例封装了详细的任务与功能.类.结构体.枚举也能够定义类型方法:类型方法与类型本身相关联.类型方法与 Obje ...

  4. 父类通过泛型获得子类Class类型 以及Type体系

    1.背景介绍 在实现SSH框架中,DAO层向数据库持久化的过程中,因为大部分保存对象的方法都会调用到sava():所有索性就把save delete update select 方法进行封装到父类中, ...

  5. XAML实例教程系列 - 类型转换器(Type Converter)七

    XAML实例教程系列 - 类型转换器(Type Converter) 分类: Windows 8 Silverlight2012-06-25 13:40 961人阅读 评论(0) 收藏 举报 butt ...

  6. 类型检查 Type Checking 一些编程语言并不安全 类型化语言的优点 定型环境 (符号表) 断言的种类

    Compiler http://staff.ustc.edu.cn/~bjhua/courses/compiler/2014/ http://staff.ustc.edu.cn/~bjhua/cour ...

  7. IUnknown(TVarData(Params[0]).VPointer) as Range

    IUnknown(TVarData(Params[0]).VPointer) as Range 修改为  IUnknown(TVarData(Params[0]).VPointer) as WOrd_ ...

  8. 读书笔记 effective c++ Item 19 像设计类型(type)一样设计

    1. 你需要重视类的设计 c++同其他面向对象编程语言一样,定义了一个新的类就相当于定义了一个新的类型(type),因此作为一个c++开发人员,大量时间会被花费在扩张你的类型系统上面.这意味着你不仅仅 ...

  9. TypeError: Fetch argument 0.484375 has invalid type <class 'numpy.float32'>, must be a string or Tensor. (Can not convert a float32 into a Tensor or Operation.)

    报错: TypeError: Fetch argument 0.484375 has invalid type <class 'numpy.float32'>, must be a str ...

随机推荐

  1. Unable to preventDefault inside passive event listener due to target being treated as passive?

    使用滚动时候,新版google浏览器,会弹出如下的警告. 解决方法,可以加上* { touch-action: none; } 这句样式去掉. 其原因:https://developers.googl ...

  2. 简单理解jQuery中$.getJSON、$.get、$.post、$.ajax用法

    在WEB开发中异步请求方式普遍使用,ajax技术减少程序员的工作量,也提升用户交互体验.AJAX的四种异步请求方式都能实现基本需求,闲话不多说,直接切入正题. 1.$.getJSON $.getJSO ...

  3. 利用django-simple-captcha生成验证码

    参考文档 http://django-simple-captcha.readthedocs.io/en/latest/ django支持1.7+ 1.安装 pip install django-sim ...

  4. nginx发布静态网页

    http://www.jb51.net/article/71384.htm 切记不要把项目放在/root下 会出现 nginx open() "" failed (13: Perm ...

  5. Python 模块 和 包

    模块 os模块 路径拼接 os.path.join

  6. windows系统numpy的下载与安装教程

    numpy是一款基于python的功能强大的科学计算包.要安装numpy首先你得先安装python.python的安装非常简单,本人安装的是python3.4. 工具/原料 安装好的python程序 ...

  7. MVC3学习:实现文章上一篇下一篇链接

    文章的显示都是通过id查询数据库来显示.但是文章会经常删除,因此id号可能不是连续的,所以上一篇下一篇文章,不能简单的做id加减法. 我的思路是:先将表格中所有文章的ID号全部放入一个数组中,如果文章 ...

  8. JAVA面试精选【Java基础第三部分】

    上一篇,我们给出了大概35个题目,都是基础知识,有童鞋反映题目过时了,其实不然,这些是基础中的基础,但是也是必不可少的,面试题目中还是有一些基础题目的,我们本着先易后难的原则,逐渐给出不同级别的题目, ...

  9. ASP.NET Core 中使用 GrayLog 记录日志

    使用 UDP 协议发送日志 自定义好的查询 key 存储数据,尽量不要使用 graylog2-server 服务端格式化日志再存储 Ubuntu 安装服务端 sudo apt-get update & ...

  10. 确保线程安全下使用Queue的Enqueue和Dequeue

    场景是这样,假设有一台设备会触发类型为Alarm的告警信号,并把信号添加到一个Queue结构中,每隔一段时间这个Queue会被遍历检查,其中的每个Alarm都会调用一个相应的处理方法.问题在于,检查机 ...