Dotnet的数据定位和匹配

Dotnet里,数据定位和匹配的相关编程现在变得很舒服。

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

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

数据定位

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

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

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

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

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

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

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

或者直接合并成:

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

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

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

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

里的x

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

Index index = ^1;

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

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

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

数据范围

有定位,就会有范围。

还是上面的例子:

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

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

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

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

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

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

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

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

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

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

省去定义,就变成:

var xx = array[3..5];

这个写法还可以延伸出:

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

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

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

数据匹配

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

class Employee
{public int Id { get; set; }public string Name { get; set; }public int Age { get; set; }
}

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

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

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

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

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

简单比较

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

类型检查并创建实例

if(employee is Employee emp)
{emp.Age = 5;
}

属性比较

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

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

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

喜欢就来个三连,让更多人因你而受益

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一年后,我又来了

差不多一年没有更新过博客了,这一年,怀孕生子,人变懒惰了,不想思考。在家休假也大半年了,颓废,什么也没干。现在宝宝已经两个多月了,没多久也要上班了,生活也逐渐走上正轨&#xff0…

mysql怎么存照片信息_mysql怎么存储图片信息?

方法一:把照片放进数据库,照片的格式最好是bmp,这样就可以在窗体上显示出来,不过这样数据库的体积会暴增。详细的使用方法请参考Access帮助中的 PictureData 属性(本文末尾有相关帮助)。而且,你可以直接用 commdlg API…

使用 .NET CLI 构建项目脚手架

前言在微服务场景中,开发人员分配到不同的小组,系统会拆分为很多个微服务,有一点是,每个项目都需要单元测试,接口文档,WebAPI接口等,创建新项目这些都是重复的工作,而且还要保证各个…

.net 垃圾回收机制

尽管在.NET framework下我们并不需要担心内存管理和垃圾回收(Garbage Collection),但是我们还是应该了解它们,以优化我们的应用程序。同时,还需要具备一些基础的内存管理工作机制的知识,这样能够有助于解释我们日常程序编写中的变…

《自然》杂志:中国人越来越沉迷于对着一个叫“区块链”的东西胡言乱语

起初,《自然》杂志以为在2018年春节前后中国发生了一场瘟疫,但很快就改变了这一看法。除了精神亢奋无法入睡,那里的人们身体还算健康。不过,他们越来越沉迷于对着一个叫“区块链”的东西胡言乱语,根本停不下来。因为教…

python if 跳出_Python保留字简单释义

作者:小小程序员链接:https://zhuanlan.zhihu.com/p/87393696来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。Guido van Rossum在1991年正式对外发布Python版本,现在已成为最流行的语言…

客官,.NETCore无代码侵入的模型验证了解下

.NETCore下的模型验证相信绝大部分的.NET开发者或多或少的都用过,微软官方提供的模型验证相关的类位于System.ComponentModel.DataAnnotations命令空间下,在使用的时候只需要给属性添加不同的特性即可实现对应的模型验证。如下所示:public cl…

敏捷个人:提供更多文档下载,并转载一篇敏捷个人读书笔记

这两周一直忙着OpenExpressApp的自动化测试支持了,对于敏捷个人最近在思考作为新手如何学习的问题,后期我会写篇blog与大家分享一下。在敏捷个人项目中我发布了敏捷个人-认识自我,管理自我.pdf,有很多朋友之前看过&…

大数据揭秘:低学历者发财的概率有多大?结果很吃惊

先看两幅图:Table 1: Mean Earnings by Highest Degree Earned, $: 2009 (SAUS, table 232)Table 2: Unemployment Rates by Educational Attainment图一是美国社会收入和最高学历的关系,图二是美国社会失业率和受教育程度的关系,数据来自SAU…

多个cpp文件生成so_boostpython:从多个.cpp文件创建一个模块(.so)

我开始在C中编写一些我想在Python代码中调用的模块。为此,我使用boostpython。随着代码的增长,我决定将其分成几个.cpp文件。现在,我有了这样的东西:食品.cpp#include "Bar.hpp"#include "Baz.hpp"#include u…

SSH远程终端连接数问题

系统 linux (Debian) 存在问题:SSH终端连接数最大为10个 解决方案: 1) 修改/etc/ssh/sshd_config中#MaxStartups 10:30:60,将其改为MaxStartups 1000 2) 重启SSH服务,/etc/init.d/ssh restar…

Win10 Terminal + WSL 2 安装配置指南

自从 Windows Terminal 正式发布后就再没有用过 Windows 系统自带的终端了。主要是 Terminal 简洁且灵活,更重要的是支持特殊字体,通过一些简单的配置可以使得终端看起来更舒适养眼。自从 Win 10 有了 Linux 子系统(WSL)&#xff…

如何快速解剖数据背后隐藏的信息

1946年2月16日,是一个值得纪念的日子。在这一天,人类历史上真正意义上的第一台电子计算机诞生了,此后计算机便随着科技的发展以强大的生命力飞速发展着。而作为用来定义计算机程序的形式语言——编程语言也紧跟计算机其后蓬勃发展&#xff0c…

mysql改密码脚本_mysql密码修改脚本

网上搜索: mysql密码修改工具 title 护卫神MySQL密码修改工具 echo off color 0a ECHO ┏━━━━━━━━━━┥ 护卫神www.huweishen.com ┝━━━━━━━━━┓ ECHO ┃ 提示: ┃ E…

来,Consul 服务发现入个门(一看就会的那种)

前言在微服务架构中,对于一个系统,会划分出多个微服务,而且都是独立开发、独立部署,最后聚合在一起形成一个系统提供服务。当服务数量增多时,这些小服务怎么管理?调用方又怎么能确定服务的IP和端口&#xf…

深入理解alias, alias_method和alias_method_chain

对于alias, alias_method, alias_method_chain的深入理解是有益的,因为rails3的源码里很多地方使用了alias_method_chain的魔法。 有人评论说alias_method_chain使用的过多不好,具体怎么不好,是后话了,这篇文章集中在理解这3个方法…

mysql数据库的安装和配置文件_MySQL 数据库安装与配置详解

目录一、概述MySQL 版本:5.7.17客户端工具:NavicatforMySQL** 二、MySQL 安装**安装条件:如果 Windows Server 2003 在安装.net framework4.0 安装过程中报错: net framework 4.0 安装时提示产生阻滞问题:运行安装程序前&#xff…

Magicodes.IE Excel合并行数据导入教程

说明Magicodes.IE.Excel目前已支持合并行单元格导入,如本篇教程所示。安装包Magicodes.IE.ExcelInstall-PackageMagicodes.IE.Excel添加Dto参考示例代码如下所示:public class MergeRowsImportDto {[ImporterHeader(Name "学号")]public long…

2010.7.27 OnDraw与OnPaint有什么区别

引用:http://wenku.baidu.com/view/bc9b1c661ed9ad51f01df2ab.html OnPaint是WM_PAINT消息的消息处理函数,在OnPaint中调用OnDraw,一般来说,用户自己的绘图代码应放在OnDraw中。 OnPaint()是CWnd的类成员,负责响应WM_P…