Я внедряю модуль обработки ошибок в моем 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;
}
Держись, то InnerException всегда должно быть пустым с кодом вы показываете. Похоже, вы уже бросаете объект того типа, который вам нужен. Не могли бы вы объяснить дальше? – Cameron
Что такое 'ExTypes'? – DavidG
Я как раз собирался набрать то же самое. И еще о том, почему мы бросаем его как SystemException ..? И не лучше ли проверять типы вместо сравнения строк? – Dreamweaver