【发布时间】:2009-09-21 12:24:38
【问题描述】:
.NET 编程指南声明我们不应捕获一般异常。由于一般的异常类型捕获,我假设以下代码不是很好:
private object CreateObject(string classname)
{
object obj = null;
if (!string.IsNullOrEmpty(classname))
{
try
{
System.Type oType = System.Type.GetTypeFromProgID(customClass);
obj = System.Activator.CreateInstance(oType);
}
catch (Exception ex)
{
Log.Error("Unable to create instance for COM Object with class name " + classname + "\n" + ex.Message);
}
}
return obj;
}
在下面的代码中,我捕获了特定的异常,但不是全部,然后我重新抛出异常,以防与非泛型异常不同。然而,函数“CreateInstance”可以抛出许多异常(ArgumentNullException、ArgumentException、NotSupportedException、TargetInvocationException、MethodAccessException、MemberAccessException、InvalidComObjectException、MissingMethodException、COMException、TypeLoadException)。
是否可以捕获所有其他单个异常?还是有更好的办法?
private object CreateObject(string classname)
{
object obj = null;
if (!string.IsNullOrEmpty(classname))
{
try
{
System.Type oType = System.Type.GetTypeFromProgID(customClass);
obj = System.Activator.CreateInstance(oType);
}
catch (NotSupportedException ex)
{
Log.Error("...." + ex.Message);
}
catch (TargetInvocationException ex)
{
Log.Error("...." + ex.Message);
}
catch (COMException ex)
{
Log.Error("...." + ex.Message);
}
catch (TypeLoadException ex)
{
Log.Error("...." + ex.Message);
}
catch (InvalidComObjectException ex)
{
Log.Error("...." + ex.Message);
}
catch (Exception ex)
{
Log.Error("Unable to create instance for COM Object with class name " + classname + "\n" + ex.Message);
throw;
}
}
return obj;
}
【问题讨论】: