2016-01-28 3 views
0

Я внедряю модуль обработки ошибок в моем asp.net 4.5 веб-приложении.Как динамически выбрасывать исключение на основе типа

Я создал GUI метательный об ошибке, который динамически заполняет селектор выпадающий из пункта А в list<Types>Exception типов для конкретного (Exception) в сборе.

Затем я хочу выбросить ошибку, чтобы проверить, как она будет захвачена/обработана.

У меня это частично работает, так как я могу генерировать исключение на основе типа, но я должен использовать его как базовый тип исключения. Фактическое исключение получает «сохранено» как innerException, но я хочу попробовать бросить конкретное исключение.

Итак, мой вопрос: как я могу сделать исключение, динамически заданное только для исключения типа?

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);  
    } 

Не нужно, чтобы показать, как я вывел список, но только для ясности Вот код, который показывает, как список:

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;  
} 
+0

Держись, то InnerException всегда должно быть пустым с кодом вы показываете. Похоже, вы уже бросаете объект того типа, который вам нужен. Не могли бы вы объяснить дальше? – Cameron

+1

Что такое 'ExTypes'? – DavidG

+0

Я как раз собирался набрать то же самое. И еще о том, почему мы бросаем его как SystemException ..? И не лучше ли проверять типы вместо сравнения строк? – Dreamweaver

ответ

0

OK, комментарии заставил меня оглянуться назад и понять, что отливка до SystemException не была проблемой, а скорее, что я намеренно исключил метод Page_Error с моей страницы, что привело к тому, что код продолжал работать до следующей строки, которая сгенерировала System.Web.HttpUnhandledException после того, как я добавил

private void Page_Error(object sender, EventArgs e) 
{ 
    //handle code 
} 

Правильное было брошено исключение/захвачен

Смежные вопросы