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

8
使用VS2010和ReSharper 5
我有一个返回System.Action的方法。
private Action ExtractFile()
{
    return delegate
    {
        MessageBox.Show("Test");
    };
}

ReSharper似乎总是提示我进行更正,将方法的返回类型映射到System.Action<T>或其变体之一。它似乎无法识别非泛型版本!VS编译并不会抱怨这个问题!当我将鼠标悬停在红色的卷曲线上时,显示的工具提示如下: "类型参数数量不正确。候选项为:void System.Action(T)、void System.Action(T1, T2)...(列表一直延续到T1-T16)。" 有什么想法吗?See the return type highlighted by ReSharper

1
同样的问题。请在委托内展示代码。 - Daniel Hilgarth
我在想是不是因为它是一个实例方法,因此建议最好将类实例传递给它?我不确定 - 只是猜测! - Andras Zoltan
我曾经在使用ReSharper 5和VS2008时遇到一个奇怪的问题:在启用“检查整个解决方案中的错误”后,打开一个大型解决方案后,它会显示任意的错误,但是代码编译正常,就像你的情况一样。在从该项目的硬盘中删除ReSharper文件、禁用“检查整个解决方案中的错误”并重新启用它之后,ReSharper再次正确地识别了所有内容,并且没有显示任何错误。 - Daniel Hilgarth
1
很遗憾听到这个消息。或许 ReSharper 支持团队可以提供帮助。 - Daniel Hilgarth
我没有ReSharper来测试,但你尝试将delegate更改为delegate()了吗? - mgronber
显示剩余8条评论
1个回答

2
似乎您需要更新ReSharper到最新版本,即5.1版。如果ReSharper未加载某些项目(请检查您的排除项目列表),则即使您的代码合法且引用了这些项目,它也会将它们标记为未知。
您可以尝试清除缓存或重置默认设置。
您的截图未显示“delegate”下的卷曲线,但使用默认设置时,它应建议您将代码改写为以下形式(但这不一定更好):
private Action ExtractFile()
{
    return () => MessageBox.Show("Test");
}

如果所有方法都失败了,点击左边的小灯泡(或按Alt+Enter)。选择“...的检查选项”,更改严重程度或选择忽略。


我已经执行了“清除缓存”操作,然后完全重新安装了ReSharper。为了确保我定制的每个设置都恢复到原始(默认)状态。但是还没有成功。 - Numan
1
感谢您提供的RS更新建议,这解决了我的问题!现在不再有红色波浪线干扰我了!+1票并标记为答案! - Numan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接