主题:  .NET异常处理办法初探

蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#12004/12/3 11:09:10
一个好的系统或网站,对异常处理都很重视。最近在想些方法,如何处理好惯常,并按友好的方式提示。.net虽然有异常处理类,但时不能直接显示信息,因这些信息很多都是调试信息,很容易把底层一些代码信息透露出来。这里我用了个简单的例子,封闭一个简单的自定义异常处理类。

    public class RssException : Exception
    {
        private string mMessage;

        public override string Message
        {
            get
            {
                return mMessage;
            }
        }

        public override string ToString()
        {
            return mMessage;
        }

        public RssException(string message)
        {
            mMessage = message;
        }
    }

本类继承系统的Exception类,并自定义mMessage变量,用来存储错误信息,重写Message和ToString方法,这样自定义类可以使用了。当然该类可以扩展,你可以把错误信息写在Log日志里去。

在一些应用程序的业务层中或数据层中一些类的包装可以调用自定义类。我写了一个XML文档的类

public class RssDocument : RssClass
{
    public void Read(string source, DocReadType type)
    {
        XmlDocumnet xmlDoc = new XmlDocumnet();

        if (type == DocReadType.FromFile)
        {
            try
            {
                xmlDoc.Load(source)                
            }
            catch
            {
                // 抛出自定义异常
                throw( new RssException("找不到该文件或文件读取错误。"));
            }
        }
        else
        {
            try
            {
                WebClient myWeb = new WebClient;
                Stream myStream = myWeb.OpenRead(source);
                xmlDoc.Load(source)                
            }
            catch
            {
                // 抛出自定义异常
                throw( new RssException("找不到该文件或文件读取错误。"));
            }
        }
        ......
    }
}

这样你在使用RssDocument类时

RssDocument doc = new RssDocument();
try
{
    doc.Read("http://www.yesky.com/rss/0001.xml", DocReadType.FromWeb)
}
catch (RssException ex)
{
    MessageBox.Show(ex.Message);
}

程序不复杂,可以深加工,如异常可以分很多,读取文件有文件找不到错误,目录错误,不能读取错误等,有很多的派生类,可以参考帮助文档。这里只是提供一些方法。


非常大鱼