以前用过一段时间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#是否该支持“try/catch/else”语法相关推荐

  1. Python 为什么不支持 i++ 自增语法,不提供 ++ 操作符?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在 C/C++/Java 等等语言中,整型变量的自增或自减操作是标 ...

  2. python为什么不能自动语法_Python 为什么不支持 i++ 自增语法,不提供 ++ 操作符?...

    在 C/C++/Java 等等语言中,整型变量的自增或自减操作是标配,它们又可分为前缀操作(++i 和 --i)与后缀操作(i++ 和 i--),彼此存在着一些细微差别,各有不同的用途. 这些语言的使 ...

  3. Python 为什么不支持 i++ 自增语法,不提供 ++ 操作符

    在 C/C++/Java 等等语言中,整型变量的自增或自减操作是标配,它们又可分为前缀操作(++i 和 --i)与后缀操作(i++ 和 i--),彼此存在着一些细微差别,各有不同的用途. 这些语言的使 ...

  4. c++提供的可有效分配对象空间的运算符是_Python 为什么不支持 i++ 自增语法,不提供 ++ 操作符?

    在 C/C++/Java 等等语言中,整型变量的自增或自减操作是标配,它们又可分为前缀操作(++i 和 --i)与后缀操作(i++ 和 i--),彼此存在着一些细微差别,各有不同的用途. 这些语言的使 ...

  5. Linux系统里让vim支持markdown格式的语法高亮

    Markdown是深受程序员喜爱的一个文件格式. 然而Linux里默认的vim设置,并不支持markdown格式的语法高亮显示. 下面就来介绍如何设置使得markdown格式的文件在vim里也能享有语 ...

  6. scss2css vscode设置_VSCode下让CSS文件完美支持SCSS或SASS语法方法

    VSCode下让CSS文件完美支持SCSS或SASS语法方法 习惯Webpack + PostCSS后, 通常PostCSS都是直接对CSS文件进行处理, 但是大部分习惯SCSS/SASS/LESS的 ...

  7. python自增_Python 为什么不支持 i++ 自增语法,不提供 ++ 操作符?

    文章来源: Python猫 作者:豌豆花下猫 在 C/C++/Java 等等语言中,整型变量的自增或自减操作是标配,它们又可分为前缀操作(++i 和 --i)与后缀操作(i++ 和 i--),彼此存在 ...

  8. 总结Cnblogs支持的常用Markdown语法

    一.什么是Markdown Markdown是一种可以使用普通文本编辑器编写的标记语言, Markdown的语法简洁明了.学习容易,而且功能比纯文本更强,因此有很多人用它写博客.世界上最流行的博客平台 ...

  9. Anycodes,在线编程网站上线啦!支持六种编程语言,语法高亮,行数显示,和代码自动折叠。小伙伴们,请速度围观!

    Anycodes项目说明 项目名称:Anycodes 曾用名成:Anycodex 声明:     该项目,目前隶属于吉林市群龙科技有限公司,项目域名是anycodes.cn     该项目代码是原创, ...

最新文章

  1. 3dmax材质通道插件_为什么3dmax插件这么多都不会整合一下呢?
  2. .NET(C#) Internals: 以一个数组填充的例子初步了解.NET 4.0中的并行(二)
  3. 国产Dhyana禅定x86处理器开始启动生产
  4. POI如何自定义单元格背景颜色
  5. linux添加源 红帽,红帽yum源改centos的源的方法
  6. 通过 Lotus Domino Java 代理消费 Web 服务
  7. .NET Conf 2021 正在进行中,带你看一看微软带来了什么内容
  8. 欢乐纪中A组周六赛【2019.5.25】
  9. aspen怎么做灵敏度分析_不会敲代码怎么做智能分析?用奥威商业智能BI
  10. 10 3 java_10.3 UiPath如何调用Java
  11. typecho免申请开发者应用集成第三方登录插件v2.1.2
  12. Android app是如何杀掉的
  13. 全网首发:java[50077:153519] Cocoa AWT: Not running on AppKit thread 0 when expected. libawt_lwawt.dylib
  14. 信息学奥赛一本通(C++版)
  15. opencv Rect函数裁剪图片
  16. C++ Primer 中文版(第 5 版)练习解答合集
  17. php AES加解密
  18. 在MyEclipse下如何添加hiber…
  19. 淮北晨刊报道我校学生募捐送温暖活动
  20. Python 使用SMTP协议发送邮件

热门文章

  1. 13个JavaScript图表图形绘制插件
  2. 我的ExtJS学习之路 ——4
  3. Linux--档案/目录 权限及修改
  4. PHP 函数 ignore_user_abort定时执行任务的实现
  5. ecshop模板的原理分析
  6. lighttpd1.4.18代码分析
  7. C#中Timer组件用法
  8. 在ASP.NET 2.0中使用样式、主题和皮肤
  9. python采集cpu信息
  10. CImg库的一个简单例子