.Net CSharp语言中When关键字的用法

【电力电子控制】基于强化学习的单相逆变器并网电流控制 本文将尝试以 DQN(Deep Q-Network)为例,设计并训练一个面向单相逆变器的智能控制器,实现对并网电流的精准调节。 阅读详情

c# 6引入了when关键字。when关键字是通过某些特定标准来过滤catch块中的异常的一种方法。后来在c# 7中扩展到case语句。我们将介绍如何在异常处理中和case语句使用when关键字。

普通的Catch处理

假设您希望使用不同的标准处理相同类型的异常。一个常见的场景是HttpException。当您捕获一个HttpException时,会返回一个响应代码。根据响应代码的不同,您可能需要采取不同的操作。

try

{

// do web call

}

catch(HttpException ex)

{

if(ex.WebEventCode >= 500)

{

HandleServerError(ex);

}

else if(ex.WebEventCode >= 400)

{

HandleNotFoundError(ex);

}

...

}

如您所见,处理错误涉及catch块中的一系列if语句。这样的代码看起来很不优雅。如果涉及到嵌套异常出来会使可读性变得更加困难,这使更加容易出现问题。

使用When关键字的Catch 处理

引入when关键字,会让代码变得优雅起来。让我们使用when关键字来处理相同的逻辑。

try

{

// do web call

}

catch(HttpException ex) when (ex.WebEventCode >= 500)

{

HandleServerError(ex);

}

catch(HttpException ex) when (ex.WebEventCode >= 400)

{

HandleNotFoundError(ex);

}

将when关键字应用到相同的代码会减少嵌套。看起来更直观,所以它使catch块的逻辑更容易理解。

在编写本文时,when关键字在代码styler中没有被格式化为关键字。这恰恰也证明这个关键字并不广为人知。这很不幸,因为它在很多情况下都很有用!

When关键字不仅仅只是能判断异常

在<code>when</code> 语句中,可以评估的不仅仅是异常。这样做实际上非常有用。看看下面的例子:

public void DoRecursion(int recurseCount = 3)

{

try

{

throw new Exception("recurse until 0");

}

catch(Exception e) when (recurseCount > 3 && e.Message == "recurse until 0")

{

DoRecursion(recurseCount--);

}

}

如您所见,评估catch异常之外的其他变量是很有用的。实际上,我今天使用它来实现对API的web调用的备份。

switch Case中使用When关键字

switch (item)

{

case type variable1:

// processing...

break;

case type variable2 when predicate:

// processing...

break;

default:

// processing...

break;

}

此 switch 非彼 switch,编译后你会发现扩展的 switch 就是 as 、if 、goto 语句的组合体。同 is expressions 一样,以前我们也能实

现只是写法比较繁琐并且可读性不强。

模式匹配语法是想让我们在简单的情况下实现类似与多态一样的动态调用,即在运行时确定成员类型和调用具体的实现。

结论

您应该开始在必须检查异常以作出决定的场景中使用when关键字。我们不用太担心其他不熟悉这个关键字的开发人员。when关键字很直观,可会很快学会!但是,一定要注意在when表达式中的对象引用不能再出新的异常。

Marvell 88E6390x交换芯片:从零构建No-CPU模式网络交换系统 本文详细介绍了如何为Marvell 88E6390x以太网交换芯片构建No-CPU模式网络交换系统。通过解析其核心价值与硬件准备,并手把手指导使用CodeBlocks、IMPGUI和SwitchGUI等软件工具进行配置代码编写、镜像生成与烧录,最终实现交换芯片脱离外部CPU独立工作,适用于成本敏感、空间受限的嵌入式网络设备设计。 阅读详情

相关推荐

单细胞空间转录组分析流程学习python版(三)

空转python版学习

zfyyzhys的博客 2084

.NET代码风格规范:工程效能的自动化契约体系

代码风格不是主观审美,而是影响可维护性、协作效率与系统稳定性的工程基础能力。从C#命名约定、null安全处理到异步编程范式,统一的风格规范支撑IDE智能提示、静态分析、CI/CD自动校验和跨团队知识传递。它直接决定SonarQube技术债评级、dotnet format修复覆盖率及.NET版本升级平滑度。尤其在中大型团队中,基于.editorconfig+Roslyn分析器+构建拦截的三层自动化治理体系,能将Code Review焦点从格式纠偏转向业务逻辑与边界设计,显著提升交付质量与新人上手速度。

416

在AVP28335(兼容德州仪器TMS320-28335) 上实现ModbusSlaveRTU-485源码及注释。

今天先把题目先给出来, 在近两天会把源码 (含详细注释 )及部署、测试结果给出来, 希望能给大家帮助。(全免费 我有点缺德,断了别人的一个财路)。

FOOLCODE的专栏 642

.NET代码风格不是审美问题:从编辑器到CI的四级防护体系

代码风格是软件工程中保障协作效率与系统可靠性的基础设施,其本质是通过统一规范降低认知负荷、减少合并冲突、提升可维护性。在C#语言灵活语法与.NET多版本共存背景下,仅靠人工约定或IDE默认设置极易失效;必须依托.editorconfig声明式规则、dotnet-format提交前自动修正、Roslyn分析器构建时强制校验、SonarQube发布前质量扫描等技术手段,形成闭环治理。尤其在微服务、遗留系统升级及跨团队协同场景中,标准化风格直接决定故障响应速度与新人上手周期——它不是写得‘好看’,而是让20人代码

weixin_40192258的博客 744

用 Coze 打造纯自动化 AI 情报助手

本文将引导您逐步构建一个简易的AI情报助手,从提示词到工作流,再到卡片消息,详细讲解了如何利用Coze平台开发自动化工具。过程简单易懂,何不亲自动手一试?如果您对此类内容感兴趣,敬请关注本作者。未来,我将带来更多精彩的AI工具教程,助您迅速掌握各类AI应用。在这个AI时代,让您领先一步。t=O83A2AGI.NET AI 教程 震撼!用 Coze 打造纯自动化 AI 情报助手震撼!

xinzhaobuxuan的博客 2531

TL431过压保护电路实战:5.5V阈值设计全流程(附MOSFET选型建议)

本文详细介绍了基于TL431和MOSFET构建5.5V阈值过压保护电路的完整设计流程。内容涵盖核心原理、阈值计算、驱动电路设计,并重点针对大电流应用场景,提供了MOSFET选型与散热处理的实战建议,帮助工程师打造可靠高效的电源保护方案。

weixin_28327051的博客 536

C#when关键字

关键字用于在模式匹配表达式中添加条件。它允许您在模式匹配的过程中指定额外的条件,以进一步过滤匹配的模式。当模式匹配和附加条件都为真时,相关的代码块将被执行。关键字为模式匹配提供了更多的灵活性,允许根据附加条件进一步控制代码的执行。如果匹配成功,且没有其他条件,将执行相关代码块。关键字,因此只有在模式匹配成功且没有附加条件时,才会执行相关代码块。只有当模式匹配成功且额外的条件为真时,才会执行相关代码块。语句中,我们使用范围模式(语句中,我们使用范围模式(在上述示例中,我们使用。语句中,我们没有使用。

ultramand的博客,重生之我在cad上二次开发猛猛敲C#代码~ 1548

naca翼型_STARCCM+计算二维翼型气动性能

STAR-CCM+计算二维翼型气动性能一算例背景机翼理论主要研究翼型在流体中运动时的力学特性。在工程领域中,机翼以升力面、控制面、叶片或桨叶等形式出现。舰船上的舵、水翼、减摇鳍等都是机翼,螺旋桨、汽轮机叶片和压缩机叶片也都是利用机翼原理工作的,而在研究船舶操纵性时,甚至还可把船体的水下部分看作一个巨大的机翼。随着航空科学的发展,世界各主要航空发达的国家建立了各种翼型系列。美国有NACA系...

weixin_39863741的博客 1万+

C#语法小技巧

一.switch case when 8.0新特性,把贼好用!(熟悉T-SQL的会感觉很亲切,新的switch扩展变得和T-SQL的Case When Then End类似,可以支持不等式区间的布尔表达式) ,其可读性吊锤if else! class Person { /// public int grade { get; set; } public string name { get; set; } public string le

huatoudd的博客 1522

把外部系统一键装进 SAP Build Work Zone:从零开始创建 HTML5 URL App

HTML5 URL App 是一种轻量级解决方案,可将外部网页或系统入口快速集成到SAP企业门户中。开发者只需在manifest.json中配置目标URL、导航模式等参数,无需开发完整前端应用。该方案利用SAP BTP的HTML5 Application Repository集中存储静态资源,通过HTML5 Apps Content Provider将应用暴露给子账号,最终在SAP Build Work Zone中以Fiori磁贴形式呈现。文章详细介绍了manifest.json的关键配置、三种基础设施组件

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 241

电机瞬态分析基础(2):理想电机的基本假设和正方向规定

电机瞬态分析基础之理想电机假设条件和正方向规定

weixin_45670943的博客 1145

C#基础知识-上下文关键字When

上下文关键字 when 在以下上下文中指定筛选条件: 在 try/catch 或 try/catch/finally 块的 catch 语句中。 在 switch 语句的 case 标签中。 在 switch 表达式中。 catch 语句中的 when class Program { static void Main() { Console.WriteLine(MakeRequest().Result); } public static async Ta

qq_41812739的博客 1422

RNA-seq分析:Step4(比对)

预处理之后的fastq文件,可以使用HISAT2软件将reads比对至参考基因组上。HISAT2软件将reads比对至参考基因组上的步骤如下:1. 对参考基因组进行建索引。对参考基因组进行预处理,生成索引文件,包括基因组序列的FM索引和SA索引。2. 将原始的reads进行预处理。包括去除接头序列、去除低质量的碱基,以及进行过滤,得到质量较高的、可靠的reads。3. 利用建立的FM索引和SA索引,将处理后的reads与参考基因组进行比对。首先,通过FM索引,快速找到与reads匹配的可能位置;

沉香best的博客 2599

CASE WHEN 基础用法详解(搬运)

1.简单CASE WHEN函数: CASE SCORE WHEN 'A' THEN '优' ELSE '不及格' END CASE SCORE WHEN 'B' THEN '良' ELSE '不及格' END CASE SCORE WHEN 'C' THEN '中' ELSE '不及格' END 等同于,使用CASE WHEN条件表达式函数实现: CASE WHEN SCORE = 'A' THEN '优' WHEN SCORE = 'B' THEN '良' WHEN SCORE = 'C'

baibai0623的博客 4495

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

when(C# 参考)

关键字来指定一个条件,此条件必须为 true,才能执行特定异常的处理程序。是一个表达式,其计算结果为布尔值。的处理程序,具体取决于异常消息的文本内容。,则执行异常处理程序;可在 catch 子句中使用。

851

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Godot 4.x + C# + VSCode 一站式环境配置与调试指南

游戏开发中,环境配置与工具链整合是项目启动的关键基础环节。其原理在于确保编辑器、编程语言支持、开发环境与调试器之间的无缝通信与兼容性。对于使用C#进行游戏开发的开发者而言,一个配置得当的环境能极大提升开发效率与调试体验。Godot作为一款轻量、开源的游戏引擎,其4.x版本对C#的支持已日趋成熟,结合VSCode这一轻量高效的代码编辑器,构成了一个强大的开发工作流。本指南聚焦于解决Godot 4.x与C#、VSCode环境整合中的常见痛点,如智能感知配置与调试器连接问题,通过详尽的步骤解析与高频问题排查,帮助

weixin_30466039的博客 451

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

工作学习笔记

Customer客户Potential潜在Service服务auth 授权delegate 代表convert 转换tool 工具cache 高速缓存Thread线程Pool池。

qq_49158620的博客 421

Unity游戏网络通信优化:从Photon迁移到gRPC与Protobuf的实战指南

在实时游戏开发中,网络通信框架的选择直接影响着游戏的性能和架构扩展性。RPC(远程过程调用)作为一种基础通信模式,通过定义清晰的接口契约,实现了跨进程的高效函数调用。其核心原理在于将本地调用透明地映射到网络请求,由序列化协议处理数据的编码与传输。gRPC作为Google开源的高性能、跨语言RPC框架,结合Protobuf这一高效的二进制序列化协议,为现代微服务架构提供了标准化的通信方案。这套组合在技术价值上体现在极致的序列化效率、紧凑的数据包体积以及原生的流式通信支持,能够显著降低延迟与带宽消耗。其应用场景

weixin_33721344的博客 309

CASE WHEN

== sql中的case when 类似Java中的switch,比较灵活 == 语法 简单Case函数 CASE 字段名称 WHEN 字段值 THEN 新值 [WHEN 字段值 THEN 新值] ... [ELSE 默认值] END Case搜索函数 CASE WHEN 断言条件 THEN 新值 [WHEN 断言条件 THEN 新值 ... [ELSE 默认值] END CASE 断言条件 WHEN TRUE THEN

lsl645031854的博客 558

C#教程6:流控制语句

在这部分 C# 教程中,将讨论流控制。我们定义了几个关键字,使我们能够控制 C# 程序的流程。在 C# 语言中,有几个关键字用于改变程序的流程。当程序运行时,语句从源文件的顶部执行到底部逐个语句递进。此流程可以通过特定关键字进行更改。语句可以执行多次。有些语句称为条件语句。它们仅在满足特定条件时执行。

gongdiwudu的专栏 5491

CASE WHEN的简单用法

 在sql中判断非A即B类似的表达式时,可以用“case-when”句式来判断。 When judgeexpression as not A is B, 语法:   CASE WHEN conditionTHEN result [WHEN ...] [ELSE result] END   CASE 子句可以用于任何表达式可以有效存在

beautifulsarah的博客 9645

.net一个函数要用另一个函数的值_Mysql:条件判断函数-CASE WHEN、IF、IFNULL详解

前言在众多SQL中,统计型SQL绝对是让人头疼的一类,之所以如此,是因为这种SQL中必然有大量的判读对比。而条件判断函数就是应对这类需求的利器。本文重点总结CASE WHEN、IF、IFNULL三种函数。1 CASE WHENCase when语句能在SQL语句中织入判断逻辑,类似于Java中的if else语句。CASE WHEN语句分为简单函数和条件表达式。1、简单函数CASE 字段 WHEN...

weixin_39633917的博客 229

linq中使用case when

select中使用case when linq代码: Products.Select(P => new{ID = P.ProductID,Name = P.Name,Color = P.Color,Price = (P.Color == "Red" ? P.StandardCost : (P.Color == "Black" ? P.StandardCost + 10 :...

weixin_34126557的博客 1379

C# Winform Access数据库中Case when语句用法

问题描述:                  在Sql中可以用Case when 语句来进行条件判断,而在access中此语句被认定为语法错误无法应用。                  case when 语句语法                                      (1)CASE sex

xiangwenfly的专栏 3014

case when常见高级使用场景

在这个查询中,使用 CASE WHEN 表达式根据订单金额将订单分为不同的类型,并在 CASE WHEN 中给出每个类型的名称。2. 嵌套 CASE WHEN:CASE WHEN 表达式可以嵌套在其他 CASE WHEN 表达式内部,形成更复杂的逻辑判断。3. 使用聚合函数: CASE WHEN 表达式可以与聚合函数结合使用,根据条件对聚合结果进行分组或筛选。注意,在 GROUP BY 子句中,再次使用相同的 CASE WHEN 表达式,以确保按订单类型进行正确的分组。(3)用case when求季度。

m0_58152036的博客 1万+

C# 模式匹配(一)

模式匹配是 C# 中的一种强大功能,用于简化类型检查、条件判断和数据结构解析的代码编写。自 C# 7.0 引入以来,模式匹配的功能不断扩展,已经成为语言核心特性之一。它通过直观的语法将复杂的逻辑处理浓缩为清晰易读的表达式和结构,从而提高代码的可维护性和开发效率。模式匹配的核心思想是根据值或数据结构的特性,直接匹配特定的模式并对其进行处理。它支持的功能包括:1.类型模式检查值是否为某种特定类型,并将其转换为该类型,以便进一步使用。这是最早引入的模式匹配形式,用于减少类型检查和类型转换的冗余代码。

熊思雨的博客 1315
上一篇: 微服务开发人员的七个基本技能
下一篇: Docker集群网络的配置和使用
codinghello
博客等级 码龄25年 47粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值