ReSharper总是要求将System.Action更改为System.Action <T>

Num*_*man 8 c# resharper

使用VS2010和ReSharper 5

我有一个返回System.Action的方法

private Action ExtractFile()
{
    return delegate
    {
        MessageBox.Show("Test");
    };
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,ReSharper倾向于向我展示一个修正方法,即应该将方法的返回类型映射到System.Action<T>其变体之一.它似乎无法识别非通用版本!VS遵守并且不抱怨这个!

当我将鼠标悬停在红色卷曲线上时,显示的工具提示显示

类型参数数量不正确.
候选人是:void System.Action(T)
void System.Action(T1,T2)
......并且列表一直持续到T1-T16

有任何想法吗?请参阅ReSharper突出显示的返回类型

Abe*_*bel 2

在我看来,您需要将 ReSharper 更新到最新版本,即版本 5.1。如果您有 ReSharper 未加载的项目(即,检查排除的项目列表),那么即使您的代码合法并引用了这些项目,它也会将它们标记为未知。

您可以尝试清除缓存,或者重置默认设置。

您的屏幕截图没有在“委托”下显示卷线,但使用默认设置,它应该建议您按如下方式重写代码(但这不一定更好):

private Action ExtractFile()
{
    return () => MessageBox.Show("Test");
}
Run Code Online (Sandbox Code Playgroud)

如果全部失败,请单击左侧的小灯泡(或按 Alt+Enter)。选择“...的检查选项”并更改严重性或选择忽略。