当前位置: 首页 > 编程日记 > 正文

C#是否该支持“try/catch/else”语法

以前用过一段时间Python,里面有个try/catch/else语法,我觉得挺好用,这个语法形如下:

try:print('try...')r = 10 / int('2')print('result:', r)
except ValueError as e:print('ValueError:', e)
except ZeroDivisionError as e:print('ZeroDivisionError:', e)
else:print('no error!')
finally:print('finally...')
print('END')

这段代码来至廖雪峰的教程,我觉得这个语法挺好的,我举一个C#的例子:

static void Main(string[] args)
{int result = 0;bool hasEx = false;try{result = Div(100, 1);}catch (Exception ex){Console.WriteLine("it's wrong:" + ex.Message);hasEx = true;}if (!hasEx){DoSomthing(result);}Console.ReadLine();
}static int Div(int dividend, int divider)
{return dividend / divider;
}static void DoSomething(int result)
{Console.WriteLine("do somthing with " + result);
}

上例中,我想在调用Div方法没有抛出异常的情况下才执行DoSomething方法,一般的处理方法如上面代码所示,用一个bool型变量来判断是否超出了异常,这样写出的代码并不是很优雅。也许有人会说把DoSomething方法放到Div方法的下面,如果Div方法抛出了异常的话就不会执行DoSomething方法了,但是这样做有一个问题:一个try块中放置多个可能抛出异常的方法本身不太合理,一旦catch到异常,可能需要额外的设计才能使得catch中的代码知道异常到底是Div方法抛出的还是DoSomething抛出的。基于如上考虑,我写了一个辅助类:

public static class TryCatchElseHelper
{public static void Do<TResult>(Func<TResult> tryToDo, Action<Exception> catchTodo, Action<TResult> elseTodo){bool catchEx = false;TResult result = default(TResult);try{if (tryToDo != null){result = tryToDo();}}catch (Exception ex){catchEx = true;catchTodo?.Invoke(ex);}if (!catchEx){elseTodo?.Invoke(result);}}
}

调用此类,上面Main函数里的代码可简化如下:

static void Main(string[] args)
{TryCatchElseHelper.Do<int>(() => Div(100, 0),ex => Console.WriteLine("it's wrong " + ex.Message),r => DoSomething(r));Console.ReadLine();
}

以上代码本属雕虫小技,大家可以借此来讨论讨论微软是否有必要在C#将来的版本中加入try/catch/else的语法,谢谢,祝节日愉快。

转载于:https://www.cnblogs.com/zzy0471/p/trycatchelse.html

相关文章:

C#语言与面向对象技术(2)

本图文中涉及的概念&#xff1a;类、对象、封装、继承和实例化。 重点在于对继承的理解&#xff0c;当子类被实例化时&#xff0c;暗示着其父类亦同步实例化为于内部隐藏的base对象。 核心在于子类与父类若有重名方法而带来的问题以及引出的一系列概念。

【亲测有效】如何下载和安装Resilio BTSync

【简介】 Resilio BTSync是一款基于P2P技术的快速、简单的文件传输和共享工具&#xff0c;可以让你很快的在不同设备之间实现文件同步。 既然是“文件同步工具”&#xff0c;那么最基本的“增量同步”功能&#xff0c;当然是必不可少的。同步完成之后&#xff0c;如果在“…

C#.NET 上传图片时怎样限制文件格式

在上传文件时&#xff0c;限制上传的文件为JPG,GIF格式,怎么处理&#xff1f;源代码&#xff1a;HttpPostedFile hpf UploadFile.PostedFile;try{UploadFile.Accept "images/*";UpfileName.Text hpf.FileName;FileSize.Text hpf.ContentLength.ToString();//取得文…

前后端分离的探索(三)

文桥&#xff0c;13级机械系学生。在LSGO软件技术团队负责前端部分&#xff0c;本图文是介绍目前流行的前后端分离技术的第三篇&#xff0c;希望大家能够对这块有所了解。 当我们培养了对一门技术的认知&#xff0c;并通过一系列项目对这门技术进行了打磨&#xff0c;接下来我…

ansible批量修改linux服务器密码的playbook

从网上找到批量修改Linux服务器root密码的playbook。 使用方法&#xff1a; 1、输入要修改的inventory组 2、按需要&#xff0c;在playbook中输入要修改的IP、新密码&#xff0c;如下&#xff1a; - hosts: productionremote_user: roottasks:- name: change password for root…

【亲测有效】在win10上如何安装Fortify17.10

Fortify是一款功能强大的源代码安全审计工具&#xff0c;可以进行静态代码扫描来发现源代码中的安全问题。 本文介绍一下如何在win10环境上安装Fortify17.10。 【安装包下载】 下载地址&#xff1a;Fortify17.10安装包 license下载地址&#xff1a; license下载 【环境要求】…

.NET 指南:枚举的设计

枚举提供了为强类型成员所用的常量值集合并且改进了代码可读性。枚举既可以是简单的也可以是标记。简单的枚举包含了没有在位比较操作中被组合或被使用的值。而标记枚举则是通过使用位比较操作关键字 OR 而有意被组合的。通过使用位比较操作关键字 AND 还可以对标记枚举的组合值…

网络框架 - 收藏集 - 掘金

浅谈 Retrofit 封装 - 让框架更加简洁易用 - Android - 掘金 尊重他人的劳动成果&#xff0c;转载请标明出处&#xff1a;http://blog.csdn.net/gengqiqu...&#xff0c; 本文出自:【gengqiquan的博客】 不...[[译] 网络请求框架 Retrofit 2 使用入门 - Android - 掘金](https:…

当一回标题党“数理系优秀校友访谈”

第一幅图&#xff1a;今天上午“数理系优秀校友访谈 — — 与校友面对面”现场。 图片由单颖同学提供 第二幅图&#xff1a;今天下午教十一D406数理系神秘实验室 图片由周鹏同学提供 第三幅图&#xff1a;我今天的心情 今天&#xff0c;数学物理 一共10名同学被系里…

Fortify 17.10进行源代码安全扫描的方法

Fortify是一款功能强大的源代码安全审计工具&#xff0c;可以进行静态代码扫描来发现源代码中的安全问题。 本文介绍一下如何使用Fortify 17.10进行源代码扫描。 【环境准备】 系统版本&#xff1a;win10版本 [10.0.17134.706] 软件版本&#xff1a;Fortify 17.10 【软件下载…

[翻译]关于SQL CE RDA数据同步的FAQ

Q1. 怎么判断用 RDA Pulled 的表是否是被跟踪的&#xff1f;什么是 RDA 订阅表&#xff1f;A1. 系统表 __sysRDASubscriptions 保存了 RDA 订阅的信息。如果表被拉下来时 tracking 选项打开了&#xff08;就是 RdaTrackOption.TrackingOn 或 RdaTrackOption.TrackingOnWithInde…

01-01java概述 doc命令、jdk\jre下载安装、path、classpath配置、开发中常见小问题

1:计算机概述(了解) (1)计算机(2)计算机硬件(3)计算机软件系统软件&#xff1a;window,linux,mac应用软件&#xff1a;qq,yy,飞秋(4)软件开发(理解)软件&#xff1a;是由数据和指令组成的。(计算器)开发&#xff1a;就是把软件做出来。如何实现软件开发呢?就是使用开发工具和计…

与14级团队同学的约定

总结&#xff1a; 这篇图文主要强调&#xff1a; 1.带学生不能按照自己认为正确的方式统一管理&#xff0c;应该针对学生的特点因材施教。 2.要为学生提供世界观指导&#xff0c;提供与世界观匹配的方法论&#xff0c;如果他们不去思考&#xff0c;就要辅助他们去思考。 带…

如何导出Fortify 17.10扫描报告

使用Fortify对项目源代码进行扫描后&#xff0c;可以把扫描的结果通过报告的形式导出&#xff0c;报告可以保存为pdf格式。 本文介绍一下导出Fortify扫描报告的具体操作步骤。 【环境准备】 系统版本&#xff1a;win10版本 [10.0.17134.706] 软件版本&#xff1a;Fortify 1…

XML Show

1<?xml version"1.0" encoding"gb2312"?>2<sys>3<set>4<ISPLAY intro"是否播放:Y否&#xff0c;N是">Y</ISPLAY>5<filePath intro"文件路径">c:\adFile\</filePath>6<date intro"…

【独家】深入浅出话AI:定义和主要研究方法

直入主题&#xff0c;咱们该先给人工智能来个全面的定义&#xff0c;对吧&#xff1f; 但悲催的是这种清晰唯一的定义在人工智能研究圈里是不存在的&#xff01;&#xff08;不存在至少是因为理解和定义智能本身就是个正在进行时。&#xff09; 人工智能的三种定义 我们确实有很…

C#语言与面向对象技术(3)

本图文主要掌握以下问题&#xff1a; 1. 什么是多态&#xff1f; 2. 多态如何分类&#xff1f; 3. 运行时多态与编译时多态有什么区别&#xff1f; 4. 方法如何重载&#xff1f; 5. 运算符如何重载&#xff1f; 6. override与overload有什么区别&#xff1f; 7. 抽象方法…

【亲测有效】如何安装屏幕录制工具ScreenPresso

ScreenPresso是一款功能强大的截图和录制屏幕工具&#xff0c;安装后可以通过简单的操作就可以录屏屏幕录像。 【安装包】&#xff1a;下载地址 【环境要求】 1&#xff09;win10操作系统 2&#xff09;ScreenPresso安装包 【安装步骤】 step 1 双击已经下载的安装包文件…

2007过年休息的日子

今天值班&#xff0c;2007年上班期间难得的轻闲机会了。借此&#xff0c;为老朋友们更新一下我的近况。年前四五天就请了年休假&#xff0c;准备享受不用上班的日子。以为能过得轻松惬意&#xff0c;想不到没完没了的家务怎么也做不完&#xff0c;似乎每天都是做饭和打扫卫生&a…

Matlab与线性代数 -- 数组的表示,冒号的用法

这段时间有同学给我后台留言&#xff0c;希望能够推送与Matlab相关的内容&#xff0c;本学期该微信号承担了数理系信息教研室线性代数课程内容推送和通知的任务&#xff0c;想来想去&#xff0c;就以此为契机&#xff0c;把Matlab的内容和线性代数的内容结合起来吧&#xff0c;…

利用SurfaceView显示正弦曲线,仿造示波器

众所周知&#xff0c;view是通过刷新来重绘视图的&#xff0c;Android系统通过发出VSYNC信号来进行屏幕重绘&#xff0c;刷新的时间间隔为16ms&#xff0c;如果在16ms内view完成你所需要的所有操作&#xff0c;那么用户在视觉上就不会产生卡顿的感觉&#xff1b;而如果执行的操…

如何使用OWASP Dependency Check的命令行(CLI)模式进行依赖库安全漏洞扫描

OWASP Dependency Check是一款用于识别项目的依赖项是否有已知漏洞的工具&#xff0c;本文介绍一下如何使用Dependency Check工具的命令行模式进行依赖库漏洞扫描。 【下载地址】&#xff1a;安装包下载 【环境要求】&#xff1a; 操作系统&#xff1a;centos7.5 【使用方法…

E8.Net 2005工作流平台版本发布

2007年2月&#xff0c;完成了EPowerFlow.Net2003版本升级到E8.Net2005版本的工作&#xff0c;今后E8.Net工作流平台就可以使用Microsoft Visual Studio 2005(SP1)的进行应用开发了。EPowerFlow.Net2003版本将继续保留一段时间&#xff0c;未来将全面推广E8.Net2005版本。E8.Net…

设计模式系列·抽象工厂模式

前言 以小说的笔法写的设计模式系列文章&#xff0c;你绝对看得懂&#xff01;[首发于公众号:"聊聊代码"] 设计模式系列王小二需求历险记(一)设计模式系列王小二需求历险记(二)设计模式系列封装、继承、多态设计模式系列初探设计模式之王小二的疑问设计模式系列Facad…

14级团队学习成果汇报 -- 利用express+socket.io搭建简易版聊天室

周鹏&#xff0c;14级数理系&#xff0c;信息与计算科学大三学生。在LSGO软件技术团队负责前端部分&#xff0c;本图文是他的一个完整作品&#xff0c;代码可在Github上下载。

String复习笔记

注&#xff1a;可以在我的下载中下载完整word版 我的String学习体系 不可变 常见操作 补充&#xff1a;重载 在变成连接符String s "abc"24"haha";格式化输出 thinking in java 的例子 StringBuffer 简介 常见操作

面向对象模型的四种核心技术

1、分类类是具有相同属性结构和操作方法的对象的集合&#xff0c;属于同一类的对象具有相同的属性结构和操作方法。分类是把一组具有相同属性结构和操作方法的对象归纳或映射为一个公共类的过程。对象和类的关系是“实例”(instance-of)的关系。同一个类中的若干个对象&#xf…

Matlab与线性代数 -- 线性间隔向量

这段时间有同学给我后台留言&#xff0c;希望能够推送与Matlab相关的内容&#xff0c;本学期该微信号承担了数理系信息教研室线性代数课程内容推送和通知的任务&#xff0c;想来想去&#xff0c;就以此为契机&#xff0c;把Matlab和线性代数的内容结合起来吧&#xff0c;希望对…

盖茨基金会:如何使用Python拯救生命

每年全球都要花费数十亿美元来预防疾病&#xff0c;减少死亡&#xff0c;资助预防保健及治疗的各种研发项目&#xff0c;以及其他的健康方案。但资金毕竟是有限的&#xff0c;所以一些组织&#xff0c;比如全球卫生资金的主要捐助者比尔&梅林达盖茨基金会&#xff08;Billa…

正则表达式复习笔记

注&#xff1a;可以在我的下载中下载完整word版 复习体系 简介 正则表达式是:符合一定规则的表达式。 作用&#xff1a;用于专门操作字符串。 特点&#xff1a;用一些特定的符号来表示一些代码操作。这样就简化书写。 所以学习正则表达式&#xff0c;就是在学习一些特殊符号…