【问题标题】:StyleCop/Code Analysis Error - How to suppressStyleCop/代码分析错误 - 如何抑制
【发布时间】:2011-02-28 09:10:59
【问题描述】:

当我在签入时运行代码分析时出现 SA0102('文件中发现语法错误')错误(另一个奇怪的问题,因为我认为 SA 是 StyleCop 问题?!)。通过添加/删除代码的过程,我推断出以下方法导致抛出此错误。据我所知,此方法是有效的,并且基于其他方法的 cmets - StyleCop 中似乎存在一些围绕此规则的错误。

无论如何,我的问题是如何抑制这个警告?我已尝试将文件名更改为 .designer.cs,但这似乎没有效果(我已确保检查了忽略设计器文件)。我对如何解决这个问题有点迷茫,因为如果不通过 StyleCop 签入政策,我就无法签入代码!还有这个

作为参考,这是导致问题的方法 - 我怀疑在声明中使用 nullables 可能是问题。

编辑:我正在使用 StyleCop v4.4.1.2

编辑:如果我删除选择的 IEnumerable<int?>,int? page = null 从参数中,规则通过。

[HttpPost]
public ActionResult Search(string searchCriteria, IEnumerable`<int?`> selected, int? page = null)
{
    if (page.HasValue)
    {
        const int PageSize = 6;
        IEnumerable<MyClass> src = this.sectors.Where(o => (selected == null || !selected.Contains(o.Id)) && o.Name.Contains(searchCriteria));
        string rows = this.RenderView(@"Awesome\LookupList", src.Skip((page.Value - 1) * PageSize).Take(PageSize));
        return this.Json(new { rows, more = src.Count() > page * PageSize });
    }

    return this.View(@"Awesome\LookupList", this.sectors.Where(o => (selected == null || !selected.Contains(o.Id)) && o.Name.Contains(searchCriteria)));
}

【问题讨论】:

  • 我无法完成您的示例,因为您使用的是 IEnumerable,但请致电 src.Skip(),这不适用于非通用 IEnumerables。为了重现您的错误,我们必须能够使用您的示例代码。我怀疑您从 IEnumerable 中删除了原始通用参数?
  • @J.Tihon - 抱歉,这是通用的 - 只是 * 上的格式问题 - 我已经更正了代码。
  • 为了让它在 MVC 3 应用程序中编译,我添加了一个类型为 IQueryable&lt;Entity&gt; 的私有成员“sectors”,其中 Entity 是一个类,其整数为“Id”,字符串为“Name” .我还需要将“IEnumerable src”更改为“IEnumerable src”。 (我还需要一个 RenderView 方法,假设它来自 MvcContrib 项目)。你的应用程序真的可以编译吗?
  • 嗨,是的,它编译得很好。我已经能够通过更改参数来解决 - 不是很好,但暂时有帮助。感谢您的回复。

标签: c# visual-studio code-analysis fxcop stylecop


【解决方案1】:

好的,如果在导致问题的参数中使用了可空类型。

【讨论】:

    【解决方案2】:

    刚刚使用 4.4.1.2 检查了您的示例,它工作正常。

    您确定您的签到政策使用 4.4.1.2 吗?它在服务器上运行,而不是在您的本地计算机上运行 - 因此您可能安装了 StyleCop 4.4.1.2,但服务器使用其他版本。

    以前的 StyleCop 版本(例如,4.4.0.14)确实存在一些与可选参数相关的错误。

    【讨论】: