Tag: try catch

C#:python try / catch / else块的等价物

在Python中,有一个有用的exception处理代码: try: # Code that could raise an exception except Exception: # Exception handling else: # Code to execute if the try block DID NOT fail 我认为能够将可能引发的代码与普通代码分开是很有用的。 在Python中,这可能如上所示,但是我在C#中找不到类似的东西。 假设该特征或类似特征不存在,将标准代码放入try块或catch块之后是标准做法吗? 我问的原因是因为我有以下代码: if (!IsReadOnly) { T newobj; try { newobj = DataPortal.Update(this); List keys = new List(BasicProperties.Keys); foreach (string key in keys) { BasicProperties[key] = newobj.BasicProperties[key]; } […]

删除过多的try-catch块

我正在重构由其他开发人员编写的中型WinForms应用程序,并且几乎每个类的每个方法都被try-catch块包围。 99%的时间这些catch只阻止记录exception或清理资源并返回错误状态。 我认为很明显,这个应用程序缺乏适当的exception处理机制,我打算删除大多数try-catch块。 这样做有什么不利之处吗? 你会怎么做? 我打算: 要适当地记录exception并阻止它们传播给用户,请使用Application.ThreadException处理程序 对于需要清理资源的情况,请保留try-catch块 更新 :使用using或try-finally块是一种更好的方法。 谢谢你的回复。 在“return-false-on-error”的方法中,让exception传播并在调用者中捕获它 欢迎任何更正/建议。 编辑:在第3项中,“return-false-on-error”我的意思是这样的方法: bool MethodThatDoesSomething() { try { DoSomething(); // might throw IOException } catch(Exception e) { return false; } } 我想把它重写为: void MethodThatDoesSomething() { DoSomething(); // might throw IOException } // try-catch in the caller instead of checking MethodThatDoesSomething’s return value try { […]

尝试/捕捉和线程

我知道为什么,但我想问一下是否有人很清楚为什么在一个线程中引发的exception永远不会被启动它的代码捕获。 这是一些非常简单的代码来演示我的意思: using System; using System.Collections.Generic; using System.Threading; namespace TestCrash { class Program { private static void Crash(object control) { AutoResetEvent are = (AutoResetEvent)(((object[])control)[0]); are.Set(); throw new Exception(“Burn baby burn”); } static void Main(string[] args) { try { List waitHandles = new List(); for (int i = 0; i < 100; i++) { AutoResetEvent are […]

如何避免重复的try catch块

我有几个方法看起来像这样: public void foo() { try { doSomething(); } catch(Exception e) { Log.Error(e); } } 我可以更改代码吗? [LogException()] public void foo() { doSomething(); } 如何实现此自定义属性? 这样做的优点和缺点是什么? —–编辑1 ———— 我可以自己实现它,我的意思是只写一个类,还是我需要使用postharp或其他解决方案?

我在哪里将try / catch与“using”语句放在一起?

可能重复: try / catch + using,正确的语法 我想try/catch以下内容: //write to file using (StreamWriter sw = File.AppendText(filePath)) { sw.WriteLine(message); } 我是否将try/catch块放在using语句中,或者在它周围? 或两者?

是否可以尝试/捕获整个C#程序?

AC#程序由以下方式调用: Application.Run (new formClass ()); 我想对整个事情进行尝试/捕获以捕获任何未捕获的exception。 当我把它放在这个Run方法时,不会捕获exception; 当程序在未捕获的exception之后终止时,控制仅返回此处。 我在哪里可以使用try / catch来覆盖整个程序? 谢谢!

在C#中制作可重用的try / catch块的建议?

我有一个类,其中有大约20个方法。 每个人都做一些Web服务消息处理。 我只需对其进行更改,并意识到这些方法中的每一个都具有完全相同的try / catch: try { /* *** actual processing specific to each method goes here *** */ } catch (FaultException cfex) { // common stuff } catch (CustomException cfex) { // common stuff } catch (Exception ex) { // common stuff } finally { FinalizeServiceCall(wsBus, wsMessage, response, logProps); } 我的问题是; 而不是在每个方法中都有这个完全相同的try / catch块,有没有办法让它变得常见? […]

如何处理catch块中的exception?

我试图找到处理exception的理想方法。 我用Google搜索并读取我应该在catch块中放置try catch以处理但是如果嵌套块本身发生任何exception会怎样。 try { int a = 10; int b = 0; int c = a / b; Console.WriteLine(c); Console.ReadKey(); } catch (Exception ex) { int a = 10; int b = 0; int c = a / b; Console.WriteLine(ex.Message.ToString()); Console.ReadKey(); } finally { Console.WriteLine(“Some Exception”); } 在谷歌搜索我读到它应该装饰如下: 如果Catch块本身发生exception,那么如何在C#中处理它? 如果Catch块本身发生exception,那么如何在C#中处理它? 如果在C#中的Catch块中发生exception会发生什么。 在这种情况下,调用者结果也是如此 try { […]

在当前上下文中不存在名称’sr’

我是从微软网站关注的例子,用于从文本文件中读取。 他们说是这样做的: class Test { public static void Main() { try { using (StreamReader sr = new StreamReader(“TestFile.txt”)); { String line = sr.ReadToEnd(); Console.WriteLine(line); } } catch (Exception e) { Console.WriteLine(“The file could not be read:”); Console.WriteLine(e.Message); } } } 但是当我在Visual C#2010中这样做时,它会给我带来错误: 可能错误的空陈述 在当前上下文中不存在名称’sr’ 我删除了using部分,现在代码看起来像这样并且正在工作: try { StreamReader sr = new StreamReader(“TestFile.txt”); string line = […]

抛出格式exceptionC#

我试图在有人试图输入非整数字符的实例中抛出格式exception。 Console.WriteLine(“Your age:”); age = Int32.Parse(Console.ReadLine()); 我不熟悉C#语言,可以使用帮助为这个实例编写try catch块。 非常感谢。