这里我想做什么,但不知道它是否有效,或者是否有更好的方法:
if (condition1){
try {
Block1;
}
} else if (condition2){
try {
Block2;
}
}
catch(ExceptionType1 ex) { process;}
catch(ExceptionType2 ex) { process;}
catch(Exception) {throw;}
那么,这是最好的方法吗?
这可以随心所欲。
try {
if (condition1) {
Block1;
} else if (condition2) {
Block2;
}
}
catch(ExceptionType1 ex) { process;}
catch(ExceptionType2 ex) { process;}
catch(Exception) {throw;}
如果没有,试着举一个清晰详细的例子。
没有确切的语法支持,但您可以通过定义异常类,并通过单独的try/catchs或if/coconditional语句(检查null、"等(,故意在块1和块2中抛出这些异常,从而获得类似的效果。
下面是一个定义后面的异常类的例子,取自这里的
[Serializable()]
public class InvalidDepartmentException : System.Exception
{
public InvalidDepartmentException() : base() { }
public InvalidDepartmentException(string message) : base(message) { }
public InvalidDepartmentException(string message, System.Exception inner) : base(message, inner) { }
// A constructor is needed for serialization when an
// exception propagates from a remoting server to the client.
protected InvalidDepartmentException(System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context) : base(info, context) { }
}
在您想要抛出异常的逻辑中,您只需要定义并抛出您定义的Exception类。这可以在单独的捕获块中完成,也可以在中完成
System.ArgumentException argEx = new System.ArgumentException("Index is out of range", "index", ex);
throw argEx;
我不确定您试图用您的结构详细实现什么。但我认为目前将整个语句块包装成一个单独的尝试块并捕获不同的异常类型没有问题。
也许你可以考虑,将你的两个代码块(块1和块2(移动到自己的函数/方法中,并在那里执行特定的异常处理,也许可以从每个新的块函数返回一些状态代码。这将是一种更干净的代码方法。