Visual Studio 代码分析错误 CA 1006

Posted

技术标签:

【中文标题】Visual Studio 代码分析错误 CA 1006【英文标题】:Visual Studio Code Analysis Error CA 1006 【发布时间】:2014-07-28 05:43:43 【问题描述】:

每当我们在接口契约中定义自定义定义时,代码分析都会抛出错误CA1006: Do not nest generic types in member signatures。处理这个所谓的设计问题的最佳方法是什么。对此有任何深刻的想法。

感谢您抽出宝贵的时间来解决这个问题。

例子:-

 Task<IList<Employee>> LoadAllEmployeeAsync();

【问题讨论】:

看看here和here这两个类似的问题。 【参考方案1】:

CA1006: Do not nest generic types in member signatures

我认为规则很明确。然而,其背后的原因是,无论谁使用您的类,都必须经历一个复杂的过程来实例化复杂的parameter(s),并降低新库的采用率。

但是,如果我们仔细想想,这条规则在这种情况下并没有多大意义。首先,您有一个嵌套的复杂泛型返回类型,它可能没有类似参数那么糟糕。其次,我不认为该规则是为异步方法设计的。

我建议在显示此返回类型的方法上禁止它。不要滥用它,因此请确保仅将其放在异步方法上,并且仅在返回类型复杂时才使用:

[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1006:DoNotNestGenericTypesInMemberSignatures", Justification="This is an async method.")]
Task<IList<Employee>> LoadAllEmployeeAsync();

【讨论】:

显然这应该由 Microsoft 解决:在 Task 的情况下,此规则应忽略一个嵌套级别的通用参数。 如果您在 C# 7+ 中使用 ValueTuple 也会弹出此问题。例如,我认为不应针对 Task&lt;(Int32 totalCount, List&lt;Entity&gt; pagedResults)&gt; 的返回类型引发该消息。 2021 年仍然是一个问题...请注意,它只影响公共方法。如果可能,更改为内部也可以解决此问题。

以上是关于Visual Studio 代码分析错误 CA 1006的主要内容,如果未能解决你的问题,请参考以下文章

名为 MultiString 的类的 Visual Studio 2010 代码分析警告 CA1704

忽略 Visual Studio 中的代码分析规则

使用 FluentAssertion 时 Visual Studio 警告 CA1806 的错误识别(不要忽略方法结果)

Visual Studio 代码分析死锁

Visual Studio 2015:C++ 代码分析错误 C1253,无法加载模型文件“res://mspft140.dll/300”

Visual Studio 2015 代码覆盖错误文件