Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在c#/.net中记录抛出的异常

如何在c#/.net中记录抛出的异常
EN

Stack Overflow用户
提问于 2009-01-20 05:39:28
回答 8查看 57.4K关注 0票数 150

我目前正在编写一个小框架,将供公司内部的其他开发人员使用。

我想提供良好的智能感知信息,但我不确定如何记录抛出的异常。

在下面的示例中:

代码语言:javascript
运行
AI代码解释
复制
public void MyMethod1()
{
    MyMethod2();

    // also may throw InvalidOperationException
}

public void MyMethod2()
{
    System.IO.File.Open(somepath...); // this may throw FileNotFoundException

    // also may throw DivideByZeroException
}

我知道记录异常的标记是:

代码语言:javascript
运行
AI代码解释
复制
/// <exception cref="SomeException">when things go wrong.</exception>

我不明白的是,如何记录由 MyMethod1()调用的代码引发的异常

我是否应该记录MyMethod2()

  • Should引发的异常?
  • 是否应该记录File.Open()引发的异常?

记录可能的异常的最佳方式是什么?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-01-20 05:51:30

您应该记录代码可能引发的每个异常,包括您可能调用的任何方法中的异常。

如果列表变得有点大,您可能希望创建自己的异常类型。捕获方法中可能遇到的所有异常,将它们包装在异常中,然后抛出异常。

另一个你可能想要这样做的地方是,如果你的方法在你的API的表面上。就像facade将多个接口简化为单个接口一样,您的API应该将多个异常简化为单个异常。使调用者更容易使用您的代码。

为了回答Andrew的一些担忧(来自评论),有三种类型的例外:一种是你不知道的,一种是你知道但无能为力的,还有一种是你知道并可以做些什么的。

那些你不知道的你想放手的人。这是快速失败的原则--最好是让你的应用程序崩溃,而不是进入一个你可能最终会破坏数据的状态。崩溃将告诉你发生了什么以及为什么,这可能有助于将该异常从“你不知道的”列表中移出。

你所知道但又无能为力的是OutOfMemoryExceptions这样的异常。在极端情况下,你可能想要处理像这样的异常,但除非你有一些非常重要的需求,否则你会把它们当作第一类--让它们去吧。你必须记录这些异常吗?在每一个新创建对象的方法上记录OOM看起来都是相当愚蠢的。

那些你知道并且可以做些什么的是那些你应该记录和包装的。

你可以找到更多的guidelines on exception handling here.

票数 115
EN

Stack Overflow用户

发布于 2009-01-20 05:46:28

您应该使用standard xml documentation

代码语言:javascript
运行
AI代码解释
复制
/// <exception cref="InvalidOperationException">Why it's thrown.</exception>
/// <exception cref="FileNotFoundException">Why it's thrown.</exception>
/// <exception cref="DivideByZeroException">Why it's thrown.</exception>
public void MyMethod1()
{
    MyMethod2();
    // ... other stuff here
}

/// <exception cref="FileNotFoundException">Why it's thrown.</exception>
/// <exception cref="DivideByZeroException">Why it's thrown.</exception>
public void MyMethod2()
{
    System.IO.File.Open(somepath...);
}

/// <exception cref="FileNotFoundException">Why it's thrown.</exception>
public void MyMethod3()
{
    try
    {
        MyMethod2();
    }
    catch (DivideByZeroException ex)
    {
        Trace.Warning("We tried to divide by zero, but we can continue.");
    }
}

这样做的价值在于,您提供了可能发生的已知异常的文档。如果您使用的是visual studio,则此文档在intellisense中可用,并且可以在以后提醒您(或其他人)您可能会遇到的异常。

您希望指定特定的异常类型,因为您可能能够处理一种类型的异常,而其他类型是严重问题的结果,无法更正。

票数 106
EN

Stack Overflow用户

发布于 2009-01-20 06:28:12

您可以通过使用几个很棒的插件来简化文档处理过程。其中之一是GhostDoc,这是Visual Studio的一个免费插件,可以生成XML-doc注释。另外,如果您使用ReSharper,可以看看优秀的ReSharper Agent Johnson Plugin,它添加了一个为抛出的异常生成ReSharper注释的选项。

更新:似乎阿根·约翰逊不能用于R# 8,请检查Exceptional for ReSharper作为替代...

XML第1步: GhostDoc生成

注释(Ctrl-Shift-D),而ReSharper的代理约翰逊插件建议也记录异常:

第2步:使用ReSharper的快捷键(Alt-Enter)添加异常文档:

step 2 http://i41.tinypic.com/osdhm

希望这能有所帮助:)

票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/461306

复制
相关文章
Haskell doctest
一定要注意格式 第一行很重要,-- |这行没有就不是一个 test。 可以对比 >>> 的个数 和 terminal里的 Examples 个数确认是否自己的所有 test 都测试了
莫听穿林
2022/05/20
3220
Haskell doctest
Haskell
这门语言在数学模型上有着很深的优势,虽然它有很多特性,让人很难接受,随着学习的深入,你才会发现这会多么有趣。
icepy
2019/06/24
8960
Haskell Platform安装
不懂了,明天写
云深无际
2020/11/03
1.1K0
Haskell Platform安装
haskell 求助
findBonding :: Eq a => (a -> a -> Bool) -> [a] -> Maybe [(a,a)]
用户6797589
2019/12/02
5590
Android应用程序中应用图标和名字的设置
在AndroidManifest.xml文件中设android:icon和 android:label指定名字和图标的位置,如: <application android:icon="@drawable/ic" android:label="@string/app_name" 则指定图标为项目工程下。。。app\src\main\res\drawable文件夹下名字为ic的图片 名字为。。。\app\src\main\res\values文件夹下strings中XML中描述的名字
用户1215536
2018/02/05
1.6K0
Android应用程序中应用图标和名字的设置
Android中获取应用程序(包)的信息-----PackageManager的使用
Android系统为我们提供了很多服务管理的类,包括ActivityManager、PowerManager(电源管理)、AudioManager(音频管理)
forrestlin
2022/04/02
2.3K0
Android中获取应用程序(包)的信息-----PackageManager的使用
android应用程序_chrome Android
最近在看Android源码Setting代码的时候,发现其中配置都是用的PreferenceFragment,以前对这一块不是很了解,
全栈程序员站长
2022/10/04
5280
android应用程序_chrome Android
模块_Haskell笔记2
hiding语法能够缓解命名冲突问题,但不很方便,对于存在大量命名冲突的模块,可以通过qualified保留命名空间来避免冲突
ayqy贾杰
2019/06/12
1.7K0
类型_Haskell笔记3
::读作“类型为”(has type),告诉编译器变量name是String类型(即[Char]类型)的
ayqy贾杰
2019/06/12
9320
类型_Haskell笔记3
Android应用程序中的多个Activity的显示创建和调用[通俗易懂]
http://download.csdn.net/detail/u011936142/7429455
全栈程序员站长
2022/07/08
1.6K0
Android应用程序中的多个Activity的显示创建和调用[通俗易懂]
本地使用 Haskell CodeWorld Locally
下载好之后注意看下载的版本,因为在之后的 .cabal 文件中要指定 codeworld-api 的版本
莫听穿林
2022/05/20
5120
本地使用 Haskell CodeWorld Locally
ubuntu 14.04 install haskell
haskell是一种函数编程式语言,ghc是Glasgow Haskell Compiler的简称,也是Haskell Platform的基础. 下面是安装ghc的步骤:
pydata
2018/08/02
7360
learn-haskell
引言 Haskell不同于Scala,是一门纯函数式语言,它强制使用者使用函数式语法而没有妥协。 是一门强类型定义的静态类型语言。它的**类型模型基于推断理论(in-ferred)**并被公认为是函数语言中最高效的类型系统之一。你会发现该类型系统支持多态语义并有助于人们作出十分整洁清晰的设计。 支持Erlang风格的模式匹配(pattern matching)和哨兵表达式。你也能在Haskell中发现Clojure风格的惰性求值(lazyevaluation)以及与Clojure和Erlang相同的列表推导
刘笑江
2018/05/28
1.1K0
Monad_Haskell笔记10
从类型来看,Functor到Applicative再到Monad是从一般到特殊的递进过程(Monad是特殊的Applicative,Applicative是特殊的Functor)
ayqy贾杰
2019/06/12
7670
Android 应用程序签名
Android应用程序签名相关的理论知识包括:什么是签名、为什么要给应用程序签名、如何给应用程序签名等。
阳光岛主
2019/02/19
1.7K0
Zipper_Haskell笔记13
数据结构不可变,所以对其进行增、删、改等操作的结果只能是重新创建一份新的数据结构,例如:
ayqy贾杰
2019/06/12
5240
Zipper_Haskell笔记13
如何使用KoodousFinder搜索和分析Android应用程序中的安全威胁
KoodousFinder是一款功能强大的Android应用程序安全工具,在该工具的帮助下,广大研究人员可以轻松对目标Android应用程序执行安全研究和分析任务,并寻找出目标应用程序中潜在的安全威胁和安全漏洞。
FB客服
2023/08/08
2140
如何使用KoodousFinder搜索和分析Android应用程序中的安全威胁
铁定不纯的IO_Haskell笔记5
一直有个疑惑,Haskell号称纯函数式语言,那么铁定不纯的场景(肯定有副作用,或者操作本身就是副作用)如何解决?
ayqy贾杰
2019/06/12
1.3K0
函数curry化(Haskell Curry)
当一个函数fn有多个参数时,可以先传入一部分参数,生成一个中继函数nextFn,然后在nextFn当中再传入剩下的参数。(一步curry化)
elson
2020/01/02
1.3K0
点击加载更多

相似问题

在Haskell应用程序中创建Haskell REPL

130

理解Haskell中的应用程序功能

30

应用程序中的类型错误- Haskell?

40

Android上的Haskell解释器?

61

Haskell -左边的应用程序

39
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文