C#中有异常概览吗?我想知道是否有所有异常类型的列表。我知道一些例外,但我不知道所有的例外。有时我抛出一个异常,然后我想,也许.NET已经有一个异常了。例如,现在我需要一个异常说明该进程不存在(如文件)。所以我的问题是:有人知道查找所有异常的列表吗?我没找到。首先,您必须了解异常是什么以及如何处理它。有一些资源可以帮助您理解这个主题。KrzysztofCwalina的“选择正确的异常类型”。http://blogs.msdn.com/kcwalina/archive/2006/07/05/657268.aspx“如何设计异常层次结构”,作者KrzysztofCwalina。http://blogs.msdn.com/kcwalina/archive/2007/01/30/ExceptionHierarchies.aspxChrisBrumme的异常模式。http://blogs.msdn.com/cbrumme/archive/2003/10/01/51524.aspx可能有帮助:CLR团队博客“为什么捕获(异常)/null捕获不好”。http://blogs.msdn.com/b/dotnet/archive/2009/02/19/why-catch-exception-empty-catch-is-bad.aspx“编写强大的异常处理代码”,作者Bil??lWagner。http://visualstudiomagazine.com/articles/2007/06/01/write-robust-exceptionhandling-code.aspx“C#:我们是否需要检查C#中的异常”https://blogs.msdn.com/abhinaba/archive/2005/12/16/504373.aspxJeffreyRichter在他的书CLRBuildingexceptionhierarchiesthroughC#(p.430,Chapter19)中,最近他编写了一个程序,使用System.Text显示System.Exception的最终结果;使用System.Reflection;使用System.Collections.Generic;publicstaticclassProgram{publicstaticvoidMain(){//通过LoadAssemblies()显式加载我们想要反射的程序集;//初始化我们的计数器和异常类型列表Int32totalPublicTypes=0,totalExceptionTypes=0;列表异常树=newList();//遍历此AppDomain中加载的所有程序集foreach(AssemblyainAppDomain.CurrentDomain.GetAssemblies()){//遍历此程序集中定义的所有类型foreach(Typetina.GetExportedTypes()){totalPublicTypes++;//如果不是公共类则忽略类型if(!t.IsClass||!t.IsPublic)继续;//构建类型派生层次的字符串StringBuildertypeHierarchy=newStringBuilder(t.FullName,5000);//假设类型不是异常派生类型BooleanderivedFromException=false;//查看System.Exception是否是该类型的基类型TypebaseType=t.BaseType;while((baseType!=null)&&!derivedFromException){//将基类型附加到字符串的末尾typeHierarchy.Append("-"+baseType);derivedFromException=(baseType==typeof(System.Exception));baseType=baseType.BaseType;}//没有更多的基础,也不是异常派生的,尝试下一个类型if(!derivedFromException)continue;//我们找到了一个异常派生类型totalExceptionTypes++;//对于这个异常派生类型,//反转层次结构中类型的顺序String[]h=typeHierarchy.ToString().Split('-');Array.Reverse(h);//从Exception->Exception派生类型中按顺序构建一个具有层次结构的新字符串//将字符串添加到异常类型列表中exceptionTree.Add(String.Join("-",h,1,h.Length-1));}}//按照层次结构的顺序将异常类型排序在一起exceptionTree.Sort();//显示异常树foreach(StringsinexceptionTree){//对于这个异常类型,将其基本类型拆分string[]x=s.Split('-');//根据基本类型的数量缩进//然后显示派生最多的类型Console.WriteLine(newString('',3*x.Length)+x[x.Length-1]);}//显示所考虑类型的最终状态}privatestaticvoidLoadAssemblies(){String[]assemblies={"System,PublicKeyToken={0}","System.Data,PublicKeyToken={0}","System.Design,PublicKeyToken={1}","System.DirectoryServices,PublicKeyToken={1}","System.Drawing,PublicKeyToken={1}","System.Drawing.Design,PublicKeyToken={1}","System.Management,PublicKeyToken={1}","System.Messaging,PublicKeyToken={1}","System.Runtime.Remoting,PublicKeyToken={0}","System.Security,PublicKeyToken={1}","System.ServiceProcess,PublicKeyToken={1}","System.Web,PublicKeyToken={1}","System.Web.RegularExpressions,PublicKeyToken={1}","System.Web.服务,PublicKeyToken={1}","System.Windows.Forms,PublicKeyToken={0}","System.Xml,PublicKeyToken={0}",};StringEcmaPublicKeyToken="b77a5c561934e089";StringMSPublicKeyToken="b03f5f7f11d50a3a";//获取包含System.Object的程序集的版本//我们假设所有其他程序集的版本相同Versionversion=typeof(System.Object).Assembly.GetName().Version;//显式加载我们要反映在foreach上的程序集(程序集中的字符串a){StringAssemblyldentity=String.Format(a,EcmaPublicKeyToken,MSPublicKeyToken)+",Culture=neutral,Version="+version;Assembly.Load(AssemblyI身份);}}}有一个异常层次结构此外,MSDN在页面上有一个异常类的继承层次结构。但这只是一个很长的列表,并没有提供太多细节。总的来说,.NET似乎很少有通用的内置异常。仅供参考,如果您使用的是VisualStudio2008,请转到菜单调试/异常,您可以在那里看到所有异常。使用该设置,您可以安排在发生异常时执行的操作看看http://explodingcoder。com/cms/content/visual-studio-fail-how-not-debug-net-exception-handling查看.NET框架中从System.Exception派生的所有类型的一个好方法是使用Reflector。键入F3以搜索“System.Exception”选择“System.Exception”类型展开“派生类型”树节点。请注意,Reflector允许您动态添加任何.NET程序集,这意味着它将在您提供的任何自定义程序集中搜索System.Exception派生类型。默认添加最常见的.NETFramework程序集。VisualStudio代码分析(又名FxCop)文档列出了有关引发现有异常的一般指南。不要抛出保留的异常类型您可以在System.Exception的MSDN页面的DerivedTypesofSystem.Exception下找到所有已定义的异常(在“继承层次结构”部分下找到它)。以上是C#学习教程:C#概览中有异常吗?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
