English 中文(简体)
A. 审判渔获的使用
原标题:usage of try catch
  • 时间:2011-06-21 14:08:33
  •  标签:
  • c#
  • try-catch

哪些是最好的:第1号法典或第2号法典? 为什么?

/* Code Snippet 1
 * 
 * Write try-catch in function definition
 */
 void Main(string[] args)
 {
     AddMe();
 }

 void AddMe()
 {
     try
     { 
         // Do operations...
     }
     catch(Exception e)
     {
     }
 }

/* Code Snippet 2
 * 
 * Write try-catch where we call the function.
 */
 void Main(string[] args)
 {
     try
     {
         AddMe();
     }
     catch (Exception e)
     {
     }
 }

 void AddMe()
 {
     // Do operations...
 }
最佳回答

真正的问题是,“与世界其他地方签订的“附加措施”是什么? 如果AddMe代表一个接口的全方位,正确处理以适当方式遇到的任何例外,那么,它就能够控制。 如果AddMe确实没有或能够知道什么是例外,那么它就应当放弃处理,并将处理工作推迟到呼吁守则。

问题回答

如同往常一样,它取决于。

在Snippet #1中,错误处理是可以使用的。 在Snippet #2中,在你希望在不同地点使用不同错误处理的情况下,情况并不好。

除此以外,它们是相同的。

但是,如果从该方法中推倒,大多数人更倾向于在方法内追捕逻辑。 只是最佳做法。

没有最佳的普遍方式。 这取决于你如何重新处理你的例外情况。

您是否计划在主要应用中使用全球标识? 您的主要方法应有试捕/捕获区块,在座标有例外。

如果你需要做除例外情况以外的其他工作,那么你仍然能够尝试/捕获内部方法,但记住要重新捕获这些方法,否则,主要方法的成像就没有什么可以记录。

并且记住,为了正确重新发展,使用:

throw;

and not:

throw e;

因为前者保留了所有痕迹,而后者则没有。

IMHO,允许提出例外情况的办法。 不要试图掩盖事情发生错。 当他们这样做时,应由客户决定他们如何处理例外情况。 之所以这样做,是因为每项申请都可能希望与例外不同。

TL,DR; Catch exceptions when you can do something about the exception, otherwise let them flow up the call stack until something else will handle them. If the exception cannot be handled by any particular part of your application, your application error event method should handle all the logging for you. Your logging functionality will be your final net for dealing with exceptions.

我与几家店合作,这些店铺需要尝试收效方法,我得知,例外物品比你能更好地观察你的呼吁。

我的另一项umb行规则是向用户通报用户触发事件的例外情况。 因此,基于事件或基于指挥的抓获将是赶上、通知、然后重新排入同一例外的一块大地。 (IE Bull; NOT Bull ex;)

这个问题已经得到了很好的答案,最终被归结为“取决于”,但我要补充一点,我认为,对于任何特定局势而言,这种方法会有很大的影响。

在你的代码上,但你的渔获物有<条码>副渔获物(Exception e){},而不是<条码>副渔获物(IOception e)或<条码>副渔获物(NullReferenceException,或其他一些较窄的例外类型。 您从<条码>、<>条码>栏目中的代码中期望的例外情况类型,将改变你想处理这种例外情况的方式。 尤其是如果你有不止一种类型可以考虑的话,如果你处理非常规的例外情况,就会出现这种情况——一个足够高的<代码>try的栏块可能会有几种不同的例外处理,并且开始冒着使密码变得迷惑的风险。

总而言之,我的一般规则是,如果例外是非关键错误(特别是如果用户投入无效),我就可以在次路线上处理,并保持系统的运作。 另一方面,如果例外情况意味着方案需要结束,我就会越发处理。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签