我试图将异常抛出逻辑包装到另一个类中,以便更容易抛出自定义异常。每个类都将使用对此 Thrower 类的直接引用或接口,无论哪种最合适。
我编写了一个简单的类来处理它并且它在大多数情况下都可以工作,但是我在具有返回类型的方法中遇到了一种情况,即使总是抛出异常,编译器也无法检测到它并抱怨并非所有路径返回一个值。
以下代码显示了 Thrower 类和任何使用所述 Thrower 的类的结构的简化形式。
public class Thrower
{
public void ThrowException()
{
throw new Exception("Im an exception");
}
}
public class Foo
{
// Does not work, compiler complains about not all paths returning values.
public int ExceptionNotDetected(bool shouldThrow)
{
if (!shouldThrow)
{
return 1;
}
var thrower = new Thrower();
thrower.ThrowException();
}
// Works fine.
public int ExceptionDetected(bool shouldThrow)
{
if (!shouldThrow)
{
return 1;
}
throw new Exception("Im an exception");
}
}
据我所知,使用 Thrower 的方法必须返回一个值或抛出异常。由此看来,ExceptionNotDetected 和 ExceptionDetected 方法在功能上是等效的。
那么为什么编译器会抱怨 ExceptionNotDetected 呢?
编辑:
关于设计,这纯粹是为了说明目的,因为我真正想做的就是了解发生了什么。如果我没有在帖子描述中正确澄清这一点,我深表歉意。话虽这么说,我很欣赏有关结构的建议。
慕容森
一只萌萌小番薯
摇曳的蔷薇
相关分类