我怎么能让Resharper或Intellisense知道一个方法allwayse抛出异常?

Ehs*_*adi 5 c# resharper intellisense exception

我有一个抛出异常的方法:

public void MyMethod()
{
    // do some logging
    throw new Exception("My Text");
}
Run Code Online (Sandbox Code Playgroud)

我在我的代码中超过100个地方使用此方法,问题是当我在另一个必须返回值的方法中使用此方法时重新锐化剂量不能理解不需要返回值,例如:

public int AnotherMethod()
{
    // some stuff
    MyMethod(); // <= it always throws exception

    return 0; // i have to put this code, while it never executes
}
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉Re-sharper MyMethod是一个例外,就像这样:

public int AnotherMethod()
{
    // some stuff
    throw new Exception(); // <= it always throws exception        
    //return 0; <= this line is no more needed
}
Run Code Online (Sandbox Code Playgroud)

ang*_*son 10

这里有两个问题.

首先,您可以提供ReSharper提示进行代码分析,我将向您展示如何进行下面的操作.

然而,这里的问题不是ReSharper,而是编译器.这些提示不会说服编译器.你展示的方法:

public int AnotherMethod()
{
    // some stuff
    MyMethod(); // <= it always throws exception

    return 0; // i have to put this code, while it never executes
}
Run Code Online (Sandbox Code Playgroud)

即使你说服ReSharper理解MyMethod总是抛出异常,也必须这样写.这与ReSharper无关,这只是C#编译器.

为了告诉ReSharper您的方法以某种方式运行,您可以使用属性标记它.您需要将这些属性的源代码副本复制到项目中,或引用ReSharper注释程序集.完成后,您可以这样标记MyMethod:

[ContractAnnotation("=> halt")]
public void MyMethod()
...
Run Code Online (Sandbox Code Playgroud)

然而,再次,C#编译器将不关心这一点,并仍然会抱怨丢失的返回.

您可以阅读有关ReSharper 在此处理解的各种属性的更多信息:ReSharper代码注释属性.