Dotnet的数据定位和匹配

存储 存储软件
最近项目紧,还要不停出差。所以,写个短点的、最近经常用到的内容:数据定位和匹配。

[[386494]]

本文转载自微信公众号「老王Plus」,作者老王Plus的老王 。转载本文请联系老王Plus公众号。

最近项目紧,还要不停出差。

所以,写个短点的、最近经常用到的内容:数据定位和匹配。

数据定位

假设我们有这样一个数组:

  1. var array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; 

我们取某个位置的值,以前的做法通常是:

  1. int x = array[4]; 
  2. int y = array[array.Length - 1]; 

现在,我们有了一个专门用于定位的结构System.Index。注意,这是一个结构。

所以,取特定位置的数据,可以写成这样:

  1. Index index = new Index(4, fromEnd: false); 
  2. int x = array[index]; 

或者直接合并成:

  1. int x = array[new Index(4, false)]; 

看一下Index的第二个参数fromEnd,很明显,就是这个计数是从前往后还是从后往前计数的一个标志。所以,从尾计数,可以写成:

  1. int y = array[new Index(1, true)]; 

这儿要稍注意一下,从后往前计数,索引值1是最后一个数据,索引值0指出去了,会报错。我们可以把这个数字想象成array.length-x

里的x。

另外,在fromEnd值为true时,即从后往前计数时,Index提供了一个简单的写法:

  1. Index index = ^1; 

额外的知识点:这个Index可以用在很多需要定位的地方。看个例子:

  1. string s = @"Hello WangPlus"
  2. char a = s[new Index(4)]; 
  3. char b = s[^2]; 

为了防止不提供原网址的转载,特在这里加上原文链接:https://abc.com

数据范围

有定位,就会有范围。

还是上面的例子:

  1. var array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; 

通常,我们取一个范围的数据,会这么取:

  1. var x = array.Skip(3).Take(2); 

或者用个循环,我就不写了。

这儿,又有一个神奇的结构:System.Range。

  1. Range r = new Range(3, 5); 
  2. var xx = array[r]; 

结果跟上面array.Skip(3).Take(2)是一样的。

这里,Range(Index start, Index end)里,两个参数就是上一节的Index。另外,开始索引是包含的,结束索引是不包含的。这儿需要注意一下。

这里又有一个简单的写法。Range(3,5)可以简单写为3..5。所以,代码可以简化为:

  1. Range r = 3..5; 
  2. var xx = array[r]; 

省去定义,就变成:

  1. var xx = array[3..5]; 

这个写法还可以延伸出:

  1. var xx = array[3..];        //从第3个数据到最后 
  2. var xx = array[..5];        //从头到第4个数据(注意后面是不包含) 
  3. var xx = array[..];            //全部 
  4. var xx = array[0..^0];    //全部 

同Index一样,这个Range也可以用在各种需要范围的地方,例如:

  1. string s = @"Hello WangPlus"
  2. string a = s[3..5]; 

数据匹配

还是拿例子来说。假设我们有下面的一个类定义:

  1. class Employee 
  2.     public int Id { get; set; } 
  3.     public string Name { get; set; } 
  4.     public int Age { get; set; } 

使用中,我们生成了一个实例:

  1. var employee = new Employee() { Id = 1, Name = "John Doe", Age = 0 }; 

然后,我们逻辑中需要一些条件判断,通常,我们可能这么写:

  1. if(employee.Age == 0) {} 
  2. if(employee.Name != null) {} 

现在,我们有了更具有可读性的写法。

简单比较

  1. if(employee.Age is 0) {} 
  2. if(employee.Name is null) {} 
  3. if(employee.Name is not null) {} 

类型检查并创建实例

  1. if(employee is Employee emp) 
  2.     emp.Age = 5; 

属性比较

  1. if (employee is { Age: 3 }) {} 
  2. if (employee is { Age: 30, Name"aaa" }) {} 
  3. if (employee is { Age: > 25 }) {} 

自己感觉,属性比较是写着最痛快的,终于不用一长串的&&了。

 

这就是今天的内容了。有没有Get到爽点?

 

责任编辑:武晓燕 来源: 老王Plus
相关推荐

2021-02-03 08:12:23

函数委托Dotnet

2010-09-10 11:32:23

CSS绝对定位CSS相对定位

2010-09-14 16:39:26

CSS DIV相对定位CSS DIV绝对定位

2011-06-21 09:06:01

2010-12-15 14:04:11

Ngrep

2010-08-16 11:28:02

DIV

2010-09-06 11:17:19

CSS相对定位CSS绝对定位

2010-08-26 16:48:48

DIV绝对定位相对定位

2021-03-03 08:13:57

模式垃圾回收

2021-12-29 07:44:50

Dotnet 代码系统

2009-09-09 11:37:08

Scala的模式匹配

2010-10-13 13:24:16

MySQL数据目录

2020-11-01 17:13:22

DotNET 5语言gRPC

2022-03-11 09:22:55

令牌Dotnet线程

2010-09-10 12:40:06

CSS相对定位CSS绝对定位

2022-08-29 15:26:58

MySQLSQL模式

2010-10-13 13:48:10

MySQL数据目录

2021-06-02 08:07:59

LinuxService应用

2017-02-16 08:41:09

数据Vlookup匹配

2010-08-17 11:10:16

DIV+CSS
点赞
收藏

51CTO技术栈公众号