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