如何基于类型

时间:2016-01-28 23:09:54

标签: c# asp.net exception

我正在asp.net 4.5网络应用中实施错误处理模块。

我创建了一个错误抛出GUI,它为特定(list<Types>)程序集的ExceptionException类型动态填充下拉选择器。

然后我想抛出选择的错误来测试如何捕获/处理它。

我有部分工作,因为我能够根据类型抛出异常,但我必须将其作为基本异常类型。实际的异常被“保留”为innerException,但我想尝试抛出特定的异常。

所以我的问题是:如果只给出异常Type?

,我怎么能动态抛出异常
 protected void ddlExcep_SelectedIndexChanged(object sender, EventArgs e)
    {
        List<Type> ExTypes = GetExceptionList();  //list of SystemException.Exception (from assembly  System.SystemException)
        DropDownList Exceptions = (DropDownList)sender;
        string exc =  Exceptions.SelectedValue.Replace("System.","");
        Type ExcType = (from E in  ExTypes where E.Name == exc select  E).FirstOrDefault();
        throw (SystemException)Activator.CreateInstance(ExcType);    
    }

没有必要说明我是如何得出列表的,但为了清楚起见 以下是显示List:

的代码
public static T Instantiate<T>() where T : class
{
        return  System.Runtime.Serialization.FormatterServices.GetUninitializedObject(typeof(T)) as T;
}

public static List<Type> FindAllDerivedTypes<T>()
{
    return FindAllDerivedTypes<T>(Assembly.GetAssembly(typeof(T)));
}

private  List<Type> GetExceptionList()
{
    List<Type> listExTypes = FindAllDerivedTypes<SystemException>();
    return listExTypes;      
}

1 个答案:

答案 0 :(得分:0)

好的,这些评论让我回顾并意识到向SystemException投射不是问题,而是我故意从我的页面中删除Page_Error方法,从而导致代码继续运行到我添加了

后生成System.Web.HttpUnhandledException的下一行
 private void Page_Error(object sender, EventArgs e)
 {
    //handle code
 }

抛出/捕获了正确的异常