如何在C#8.0中使用索引和范围

C#8.0中有几个有趣的新功能和增强功能。 索引和范围是两个新添加项,分别作为新的System.Index和System.Range类型的一部分提供,用于索引和切片。 本文讨论了如何在C#8.0中使用索引和范围。

若要使用本文提供的代码示例,您应该在系统中安装Visual Studio 2019。 如果您还没有副本,则可以在此处下载Visual Studio 2019

[ 同样在InfoWorld上:如何将多个参数传递给Web API控制器方法 ]

在Visual Studio 2019中创建控制台应用程序项目

首先,让我们在Visual Studio中创建一个.NET Core控制台应用程序项目。 假设系统中已安装Visual Studio 2019,请按照以下概述的步骤在Visual Studio中创建新的.NET Core控制台应用程序项目。

  1. 启动Visual Studio IDE。
  2. 点击“创建新项目”。
  3. 在“创建新项目”窗口中,从显示的模板列表中选择“控制台应用程序(.NET Core)”。
  4. 点击下一步。
  5. 在接下来显示的“配置新项目”窗口中,指定新项目的名称和位置。
  6. 单击创建。

这将在Visual Studio 2019中创建一个新的.NET Core控制台应用程序项目。我们将在本文的后续部分中使用此项目。

在Visual Studio中更新语言版本

为了能够在Visual Studio中使用C#8.0,应该像我们所做的那样使用针对.NET Core的项目。 您还需要更改项目中使用的语言的语言版本。 为此,请按照以下概述的步骤操作:

  1. 右键单击该项目。
  2. 选择“属性”以调用属性窗口。
  3. 单击构建->高级。
  4. 单击语言版本的下拉控件。
  5. 选择C#8.0作为语言版本。
  6. 单击确定。

System.Index和System.Range结构

C#8.0引入了两种新类型,即System.Index和System.Range。 您可以在运行时使用这些结构对集合进行索引或切片。 这是在System名称空间中定义System.Index结构的方式。

namespace System
{
    public readonly struct Index
    {
        public Index(int value, bool fromEnd);
    }
}

这是在System名称空间中定义System.Range结构的方式。

namespace System
{
    public readonly struct Range
    {
        public Range(System.Index start, System.Index end);
        public static Range StartAt(System.Index start);
        public static Range EndAt(System.Index end);
        public static Range All { get; }
    }
}

[ 同样在InfoWorld上:何时在C#中使用抽象类和接口 ]

在C#8.0中使用System.Index从头开始对集合进行索引

从C#8.0直到最后,C#都没有办法索引集合。 现在,可以通过使用一元运算符必须为System.Int32的一元^“ hat”运算符,来利用集合末尾的索引功能。

这是在C#8.0中如何定义来自最终运算符的预定义索引。

System.Index operator ^(int fromEnd);

让我们通过一个例子来理解这一点。 考虑以下字符串数组。

string[] cities = { "Kolkata", "Hyderabad", "Bangalore", "London", "Moscow", "London", "New York" };

下面的代码片段显示了如何利用^运算符来检索存储在数组中最后一个索引中的城市名称。

var city = cities[^1];
Console.WriteLine("The selected city is: " + city);

这是完整的程序供您参考。

using System;
namespace RangesAndIndexes
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] cities = { "Kolkata", "Hyderabad", "Bangalore",
            "London", "Moscow", "London", "New York" };
            var city = cities[^1];
            Console.WriteLine("The selected city is: " + city);
            Console.ReadKey();
        }
    }
}

执行程序时,输出应显示在控制台窗口中,如下图所示。

csharp 8 systemrange输出01 IDG

在C#8.0中使用System.Range提取序列的子集

使用数组和跨度类型时,可以利用System.Range提取序列的子集。 以下代码段说明了如何使用范围和索引显示字符串的最后六个字符。

string str = "Hello World!";
Console.WriteLine(str[^6..]);

当您执行程序时,输出“ World!” 应该出现在控制台窗口中,如下图所示。

csharp 8 systemrange输出02 IDG

这是另一个示例,说明切片的工作方式。

int[] integers = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var slice = integers[1..5];
foreach (int i in slice)
Console.WriteLine(i);

当您执行上述程序时,数字1到4将显示在控制台窗口中。

您还可以在[..]括号内传递范围操作数,如下面的代码段所示。

string[] cities = { "Kolkata", "Hyderabad", "Bangalore", "London", "Moscow", "London", "New York" };
var data = cities[0..4];
foreach (var city in data)
{
   Console.WriteLine(city);
}

执行程序时,存储在数组中的前四个城市名称将显示在控制台窗口中。

[ 也在InfoWorld上:2020年探索的5种Microsoft开发人员工具和技术 ]

在C#8.0之前,没有任何语法有效的方法来访问C#中的范围或集合的切片。 现在,您有了两个新的语法糖-^(帽子)和'..'(范围)操作数,它们用于访问集合中的各个元素或范围,从而有助于使代码清晰,可读性和可维护性。

From: https://www.infoworld.com/article/3532284/how-to-use-indices-and-ranges-in-csharp-80.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值