c# – 高效的异常处理技术
我正在用C#编写一个应用程序,它要求我从用户传入的某些维度动态创建一个Array对象.Array.CreateInstance()方法可以抛出(通过最后计数)我想要处理的6个不同的异常.对于每个异常,我都希望通过简单的MessageBox.Show()和针对异常情况的消息来通知用户.我不想做的是捕获一般的异常类型,因为不这样做是最好的做法.我会尝试捕获ArgumentException或更具体的东西,但所有异常的唯一常见超类是Exception.
结论:我正在试图找出处理这么多不同异常的最佳方法,以及什么是有效的,更重要的是可维护的解决方案. try { data = Array.CreateInstance(TypeHelper.StringToType(cbDataType.SelectedItem.ToString()),dimensions); } catch (OutOfMemoryException) { } catch (NullReferenceException) { } catch (NotSupportedException) { } catch (ArgumentNullException) { } catch (ArgumentOutOfRangeException) { } catch (ArgumentException) { } 解决方法
在该列表中,我将考虑捕获的只有4个例外:
> NotSupportedException 另外两个你永远不应该抓住,而在后来的CLR中,你无法捕捉OOM情况(如果你需要找出,请考虑MemoryFailPoint). 深入研究Array.CreateInstance,我们看到为什么抛出这四个中的每一个: > NotImplementedException:您给它的类型不能是数组,或者是开放的泛型.由于您从固定列表中提取这些数据类型,因此您应该先验地知道这些类型是有效类型.我会反对处理这个例外. 所以,我建议的代码是: // code prior to this point ensures cbDataType only has correct types // and dimensions has at least 1 dimension and is all greater than or equal to 1 data = Array.CreateInstance( TypeHelper.StringToType(cbDataType.SelectedItem.ToString()),dimensions); 总之,我不会处理任何异常,因为您应该能够阻止所有这些异常发生,并且您不应该关心无法处理异常的实例. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |