为什么在以下情况下c#编译器不够智能?

    void ThrowEx() {
        throw new Exception();
    }

    int Test() {
        ThrowEx();
    }


... Test()':并非所有代码路径都返回值

编辑:在实践中,我想将异常抛出逻辑提取到单独的方法中,因为我已经厌倦了键入throw new FaultException<MyCustomFault>(new MyCustomFault(), "cannot validate the input");之类的东西

最佳答案

它不会在方法之间切换;尤其重要的是,该方法可能位于不同的程序集中,并且可以在不进行重建的情况下进行更改,或者可以是虚拟的,外部的,抽象的或部分的-仅会发现少量情况会造成混淆。

您可以让ThrowEx返回“ int”,然后:

return ThrowEx();


这会使编译器高兴。或使用泛型:

static T ThrowEx<T>() {...}
...
return ThrowEx<int>();

08-25 12:59